{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "from \"Generating Long Sequences with Sparse Transformers\" (https://arxiv.org/pdf/1904.10509)\n",
    "note you won't see a speedup running this since GPUs still do the full dense matmul \n",
    "this is why you need sparse CUDA kernels to tell the GPU that the full matmul is not needed\n",
    "and they do this in the paper, but its out of scope for this implementation of the core idea \n",
    "'''\n",
    "import torch \n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAGDCAYAAABdvT19AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgMNJREFUeJzt3Xl4VOXZP/DvZJkkBJKwJSEkhFWRRUVBDAKtJTUqanFrtVTB9a0FBW1deNtCfauitLWWutJa8VdRrNYFraIUFBQQEQWTgAgkkARIAEM2ss88vz+SmWQyZ5uzzJyZ+X6uK9dVZibDcyKd59x57sUhhBAgIiIiIiLSKSbUCyAiIiIiovDGoIKIiIiIiAxhUEFERERERIYwqCAiIiIiIkMYVBARERERkSEMKoiIiIiIyBAGFUREREREZAiDCiIiIiIiMoRBBRERERERGcKggmzN4XDgd7/7XVj+PcFaezThz5SI9Prd734Hh8Oh6bVmf9Z8/PHHcDgc+Pjjj017z3DAz+zowqCCsHLlSjgcDnzxxRehXkrAjh07BofDgQULFvg9t2DBAjgcDixZssTvuRtvvBHx8fFobGwMxjJt4emnn4bD4cDkyZMln9+9ezd+97vf4eDBg5Lfu3LlSmsX2Om9997jJkQUpQoLC3HNNdcgNzcXiYmJGDx4MH74wx/ir3/9q8/rHnnkEbz11luhWWSQ8DObwg2DCgpr6enpGDVqFD799FO/5zZv3oy4uDhs3rxZ8rkJEyagV69eAICmpib85je/sXy9obRq1SoMHToUn3/+Ofbv3+/3/O7du/Hggw/aYoN68MEHJZ+Lhv9ORNFqy5YtmDhxInbt2oXbbrsNTz75JG699VbExMTgL3/5i89r9QQVv/nNb9DU1GTiiq3Fz2wKNwwqKOxNnToVu3btQkNDg/exU6dOYdeuXfjxj3+Mbdu2weVyeZ87evQoSkpKMHXqVO9jiYmJiIuLC+q6g6m0tBRbtmzB448/joEDB2LVqlWhXpIukf7fiSiaPfzww0hNTcX27dvxm9/8BrfeeisefPBBfPDBB9iyZYvu9z116hQAIC4uDomJiWYt11L8zKZwxKCCNPvqq69wySWXICUlBb1798aMGTPw2Wef+b2upqYGd999N4YOHYqEhARkZ2fjxhtvxIkTJwAAra2tWLx4Mc4991ykpqYiOTkZ06ZNw0cffaRrXVOnToXL5fJZy7Zt29De3o5f/epXaGhowM6dO73PeU4uugcVPfM+Pbm3+/fvx9y5c5GWlobU1FTcdNNNfilTLS0tuPvuuzFw4ED06dMHV1xxBSoqKiTXqvYzrKmpQWxsLJYvX+597MSJE4iJiUH//v0hhPA+fscddyAzM1PTz2jVqlXo27cvZs6ciWuuucZvg1q5ciWuvfZaAMCFF14Ih8Phzf8dOnQoiouLsXHjRu/j3//+933WvHDhQuTk5CAhIQEjR47EY489Brfb7X3NwYMH4XA48Mc//hErVqzAiBEjkJCQgEmTJmH79u3e182dOxdPPfUUAHj/ru450FL5uVr+XXpS/DZv3ox77rkHAwcORHJyMq688kocP35c08+QiKx14MABjB07FmlpaX7Ppaene/+3w+HAqVOn8OKLL3o/I+bOnQug67N79+7d+OlPf4q+fft6P+ulaioC+fw+fPgwbr75ZmRkZCAhIQFjx47FP/7xD7/XVVRUYNasWUhOTkZ6ejruvvtutLS0BPSz4Gc2P7PDEcNH0qS4uBjTpk1DSkoK7rvvPsTHx+O5557D97//fWzcuNGb89nQ0IBp06Zhz549uPnmm3HOOefgxIkTWLNmDSoqKjBgwADU1dXh73//O66//nrcdtttqK+vx/PPP4+CggJ8/vnnOPvsswNam2fD+PTTT5Gfnw+gI3A47bTTMGHCBGRnZ2Pz5s0499xzvc91/z4lP/7xjzFs2DAsXboUX375Jf7+978jPT0djz32mPc1t956K1566SX89Kc/xZQpU7BhwwbMnDlT188wLS0N48aNw6ZNm3DXXXd5r8vhcKC6uhq7d+/G2LFjAQCffPIJpk2bpulntGrVKlx11VVwOp24/vrr8cwzz2D79u2YNGkSAGD69Om46667sHz5cvzv//4vzjjjDADAGWecgSeeeAJ33nknevfujV//+tcAgIyMDABAY2Mjvve97+Hw4cP4n//5HwwZMgRbtmzBokWLcPToUTzxxBM+63j55ZdRX1+P//mf/4HD4cCyZctw1VVXoaSkBPHx8fif//kfHDlyBOvWrcM///lP1evS+u/S484770Tfvn2xZMkSHDx4EE888QTmz5+PV199VdPPkYisk5ubi61bt6KoqAjjxo2Tfd0///lP3HrrrTjvvPNw++23AwBGjBjh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w9atW3WvMS4uDpMnT8bmzZuxefNmbz2Fx5QpU7Bp0yZ89tln3rQoM1xyySUA4NMCFoBfB41AfoZAR1Bx8OBBvPrqq950qJiYGEyZMgWPP/442traVOspmpqa8MYbb+Cyyy7DNddc4/c1f/581NfXe3OVk5OTAXS0G+wpOTlZ8vEf//jH2Lp1Kz744AO/52pqatDe3q64RilK6+gu0J8pEdnbRx99JPkbaE/tQ/cbf7nPpEAE8vl99dVX49///rfkL826tzi99NJLceTIEbz++uvexxobG7FixQrV9fAzm5/Z4Y4nFeT1j3/8A2vXrvV7fMGCBXjooYewbt06TJ06Fb/4xS8QFxeH5557Di0tLVi2bJn3tffeey9ef/11XHvttbj55ptx7rnnorq6GmvWrMGzzz6Ls846C5dddhneeOMNXHnllZg5cyZKS0vx7LPPYsyYMT4D7AI1depU76yLnoHDlClTsHTpUu/rzHL22Wfj+uuvx9NPP43a2lpMmTIF69evl5x+qvVnCHTVVezduxePPPKI9/Hp06fj/fff9/YLV7JmzRrU19fjiiuukHz+/PPP9w5V+slPfoKzzz4bsbGxeOyxx1BbW4uEhAT84Ac/QHp6Os4991w888wzeOihhzBy5Eikp6fjBz/4Ae69916sWbMGl112GebOnYtzzz0Xp06dQmFhIV5//XUcPHgQAwYMCOhn6mn9e9ddd6GgoACxsbG47rrrJF8byM+UiOztzjvvRGNjI6688kqMHj0ara2t2LJlC1599VUMHTrUW78AdHxO/Pe//8Xjjz/uTRnt2Y5UTSCf348++ig++ugjTJ48GbfddhvGjBmD6upqfPnll/jvf/+L6upqAPBOAr/xxhuxY8cODBo0CP/85z/Rq1cv1fXwM5uf2WEvJD2nyFY8rdvkvsrLy4UQQnz55ZeioKBA9O7dW/Tq1UtceOGFYsuWLX7v991334n58+eLwYMHC6fTKbKzs8WcOXO8rfjcbrd45JFHRG5urkhISBATJkwQ7777rpgzZ47Izc31eS9obCkrhBAffPCBACDi4uLEqVOn/NbkcDgEALFt2za/7+3593haDx4/flzyZ1VaWup9rKmpSdx1112if//+Ijk5WVx++eWivLxccu1af4ZCdLTJBSCqqqq8j3366acCgJg2bZrqz+Pyyy8XiYmJfj+L7ubO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6NChSExMxOTJk/H555+HekkBWbp0KSZNmoQ+ffogPT0ds2bNwt69e31e09zcjHnz5qF///7o3bs3rr76alRVVfm8pqysDDNnzkSvXr2Qnp6Oe++9F+3t7cG8lIA9+uijcDgcWLhwofexSLrWw4cP42c/+xn69++PpKQkjB8/Hl988YX3eSEEFi9ejEGDBiEpKQn5+fnYt2+fz3tUV1dj9uzZSElJQVpaGm655RY0NDQE+1IUuVwu/Pa3v8WwYcOQlJSEESNG4Pe//z2695kI12vdtGkTLr/8cmRlZcHhcOCtt97yed6s6/r6668xbdo0JCYmIicnB8uWLbP60qIG94gO4fK52R33iPD83OyJe4RN9ghBilavXi2cTqf4xz/+IYqLi8Vtt90m0tLSRFVVVaiXpllBQYF44YUXRFFRkdi5c6e49NJLxZAhQ0RDQ4P3NT//+c9FTk6OWL9+vfjiiy/E+eefL6ZMmeJ9vr29XYwbN07k5+eLr776Srz33ntiwIABYtGiRaG4JE0+//xzMXToUHHmmWeKBQsWeB+PlGutrq4Wubm5Yu7cuWLbtm2ipKREfPDBB2L//v3e1zz66KMiNTVVvPXWW2LXrl3iiiuuEMOGDRNNTU3e11x88cXirLPOEp999pn45JNPxMiRI8X1118fikuS9fDDD4v+/fuLd999V5SWlorXXntN9O7dW/zlL3/xviZcr/W9994Tv/71r8Ubb7whAIg333zT53kzrqu2tlZkZGSI2bNni6KiIvHKK6+IpKQk8dxzzwXrMiMW94gO4fK52R33iPD93OyJe4Q99ggGFSrOO+88MW/ePO+fXS6XyMrKEkuXLg3hqow5duyYACA2btwohBCipqZGxMfHi9dee837mj179ggAYuvWrUKIjn/UMTExorKy0vuaZ555RqSkpIiWlpbgXoAG9fX1YtSoUWLdunXie9/7nnfDiKRrvf/++8XUqVNln3e73SIzM1P84Q9/8D5WU1MjEhISxCuvvCKEEGL37t0CgNi+fbv3Ne+//75wOBzi8OHD1i0+QDNnzhQ333yzz2NXXXWVmD17thAicq6154Zh1nU9/fTTom/fvj7/fu+//35x+umnW3xFkY97RHh9bnpwj4icz00huEfYZY9g+pOC1tZW7NixA/n5+d7HYmJikJ+fj61bt4ZwZcbU1tYCAPr16wcA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euutmD59Oo4ePYpBgwYBAN599100NjbiJz/5SciuhYiIzMU9giKJQwghQr0Iokgzd+5cvPLKK2htbcX69evxgx/8wPtcfn4+ZsyYgUWLFnkfe+mll3DffffhyJEjAICxY8dizpw5uO+++wAAV1xxBfr3748XXnghuBdCRESm4x5BkYhBBZEF5s6di+LiYpw4cQLZ2dl4//330bt3bwDAwIED0dDQgNjYWO/rXS4XmpubcerUKfTq1Qt//vOfsWLFCuzZswdVVVXIzs7Ghg0bMG3atFBdEhERmYR7BEUi1lQQWWTw4MH4+OOPcfjwYVx88cWor68HADQ0NODBBx/Ezp07vV+FhYXYt28fEhMTAQA33ngjSkpKsHXrVrz00ksYNmwYNwsiogjCPYIiDWsqiCyUm5uLjRs34sILL8TFF1+MtWvX4pxzzsHevXsxcuRI2e/r378/Zs2ahRdeeAFbt25lNxAiogjEPYIiCYMKIovl5OTg448/xoUXXoiCggLcf//9uOaaazBkyBBcc801iImJwa5du1BUVISHHnrI+3233norLrvsMrhcLsyZMyeEV0BERFbhHkGRgulPREGQnZ2Njz/+GCdOnMCjjz6K119/HR9++CEmTZqE888/H3/+85+Rm5vr8z35+fkYNGgQCgoKkJWVFaKVExGR1bhHUCRgoTaRTTU0NGDw4MF44YUXcNVVV4V6OUREZCPcI8humP5EZDNutxsnTpzAn/70J6SlpeGKK64I9ZKIiMgmuEeQXTGoILKZsrIyDBs2DNnZ2Vi5ciXi4vh/UyIi6sA9guyK6U9ERERERGQIC7WJiIiIiMgQBhVERERERGQIgwoiIiIiIjKEQQURERERERnCoIKIiIiIiAxhUEFERERERIYwqCAiIiIiIkMYVBARERERkSH/H/jZURF1HiYmAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([8, 1024, 512])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# variant 1 from the paper, where they hardcode two head attention patterns\n",
    "# one head is local sliding window attention\n",
    "# the other is globally strided \n",
    "class StridedAttention(nn.Module): \n",
    "    def __init__(self, D=512, stride=3, window=10):\n",
    "        super().__init__()\n",
    "        self.D = D\n",
    "        self.wq = nn.Linear(D,D)\n",
    "        self.wk = nn.Linear(D,D)\n",
    "        self.wv = nn.Linear(D,D)\n",
    "        self.wo = nn.Linear(D,D)\n",
    "        \n",
    "        self.head_dim = D//2 # hardcode two attn heads, as in the paper \n",
    "        self.n_heads = D//self.head_dim \n",
    "        self.stride = stride\n",
    "        self.window = window\n",
    "\n",
    "    def forward(self, x, plot=False): # BSD -> BSD \n",
    "        B, S, D = x.shape\n",
    "        \n",
    "        q, k, v = self.wq(x), self.wk(x), self.wv(x) # BSD -> BSD\n",
    "\n",
    "        # view as B, n_heads, S, head_dim\n",
    "        q = q.view(B, self.n_heads, S, self.head_dim)\n",
    "        k = k.view(B, self.n_heads, S, self.head_dim)\n",
    "        v = v.view(B, self.n_heads, S, self.head_dim)\n",
    "    \n",
    "        scores = torch.einsum('bnqd,bnkd->bnqk', q, k) # [batch, nheads, seq, seq] \n",
    "        \n",
    "        # KEY SPARSE ATTN COMPUTATIONS\n",
    "        causal_mask = torch.arange(S, device=x.device)[:, None] >= torch.arange(S, device=x.device)\n",
    "        stride_mask = (torch.arange(S, device=x.device)[:, None] - torch.arange(S, device=x.device)) % self.stride == 0\n",
    "        local_diff = torch.arange(S, device=x.device)[:, None] - torch.arange(S, device=x.device)\n",
    "        \n",
    "        local_mask = (local_diff >= 0) & (local_diff < self.window) & causal_mask \n",
    "        strided_mask = stride_mask & causal_mask \n",
    "\n",
    "        # expand masks to batch dimension and add head dimension\n",
    "        local_mask = local_mask.unsqueeze(0).unsqueeze(0).expand(B, 1, S, S)  # [B, 1, S, S]\n",
    "        strided_mask = strided_mask.unsqueeze(0).unsqueeze(0).expand(B, 1, S, S)  # [B, 1, S, S]\n",
    "        \n",
    "        # combine masks for both heads\n",
    "        overall_mask = torch.cat([local_mask, strided_mask], dim=1)  # [B, 2, S, S]\n",
    "        masked_scores = torch.where(overall_mask, scores, torch.tensor(float('-inf'), device=scores.device))\n",
    "        A = F.softmax(masked_scores/(self.head_dim ** 0.5), dim=-1)\n",
    "\n",
    "        # helper for visualization so we can see attn masks in action \n",
    "        if plot:\n",
    "            import matplotlib.pyplot as plt\n",
    "            fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 8))\n",
    "            \n",
    "            ax1.imshow(local_mask[0,0].cpu())\n",
    "            ax1.set_title('Local Window Attention')\n",
    "            ax1.set_xlabel('Key')\n",
    "            ax1.set_ylabel('Query')\n",
    "            \n",
    "            ax2.imshow(strided_mask[0,0].cpu())\n",
    "            ax2.set_title('Strided Attention')\n",
    "            ax2.set_xlabel('Key') \n",
    "            ax2.set_ylabel('Query')\n",
    "            \n",
    "            plt.tight_layout()\n",
    "            plt.show()\n",
    "\n",
    "        # sanity checks that attn looks like we want it to \n",
    "        assert torch.allclose(A.sum(dim=-1), torch.ones_like(A.sum(dim=-1))), \"Attention weights don't sum to 1\"\n",
    "        assert torch.all((A > 0) == overall_mask), \"Attention weights don't match mask pattern\"\n",
    "        # END KEY SPARSE ATTN COMPUTATIONS\n",
    "\n",
    "        out = torch.einsum('bnqk,bnkd->bnqd', A, v)\n",
    "        # reshape from [batch, n_heads, seq, head_dim] back to [batch, seq, dim], this cats head outputs\n",
    "        out = out.view(B, S, D)\n",
    "        \n",
    "        return self.wo(out)\n",
    "\n",
    "attn = StridedAttention(stride=25, window=50)\n",
    "B, S, D = 8, 1024, 512\n",
    "x = torch.randn(B, S, D)\n",
    "attn(x, plot=True).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAGDCAYAAABdvT19AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAV7pJREFUeJzt3Xl8U1X+//F30p1CWwq0paxl+cqqIihWQEAqVUBFcUFxBHcRVGRGFBcQXBDGBVEEmVHQsYiD44KMMjIgoFIBEVwQEREFgRaxtAVK15zfH/yaIXRJ2ibN9no+Hnk8yL03yTmn4X7yuWe5FmOMEQAAAADUktXbBQAAAADg30gqAAAAANQJSQUAAACAOiGpAAAAAFAnJBUAAAAA6oSkAgAAAECdkFQAAAAAqBOSCgAAAAB1QlIBAAAAoE5IKmBnsVj06KOPeuS916xZI4vForffftsj71+VRx99VBaLpV4/0x3K22vNmjXeLorf8eT3GID/GDBggAYMGODtYgQ94lnwIKkIYIsWLZLFYnF4JCQkaODAgfroo4+8XTyXDBgwoEIdKnvwI9I9XnrpJVksFvXu3bvS/d9//70effRR/fLLL5W+dtGiRZ4t4P/34Ycf8jcHAsyuXbt0++23q127doqMjFRMTIz69Omj559/XsePH/d28bzm6quvlsVi0f3331/p/qrOhwUFBXr00Ufr7cd8fcYA+KZQbxcAnjd9+nSlpKTIGKPs7GwtWrRIQ4YM0QcffKBhw4Z5u3jVeuihh3TLLbfYn2/atElz5szRgw8+qM6dO9u3n3766ZW+/uGHH9YDDzzg8XIGioyMDLVt21YbN27UTz/9pA4dOjjs//777zVt2jQNGDBAbdu2ddj30ksvqWnTphozZozHy/nhhx9q7ty5lQbS48ePKzSUUxvgT/7973/rqquuUkREhG644QZ169ZNxcXF+uyzz3Tfffdp27ZtWrBggbeLWe/y8/P1wQcfqG3btnrzzTf11FNPVeh9r+p8WFBQoGnTpklSvfTYVBUDzj//fB0/flzh4eEeLwO8i8gbBC6++GL16tXL/vzmm29WYmKi3nzzTZ9PKi688EKH55GRkZozZ44uvPDCak+Sx44dU3R0tEJDQ/mBqf+1R3V2796t9evX65133tHtt9+ujIwMTZ06tZ5K6D6RkZHeLgKAGti9e7dGjhypNm3aaPXq1WrevLl937hx4/TTTz/p3//+txdL6D3/+te/VFZWpldffVUXXHCB1q1bp/79+3u7WDVitVo5LwcJhj8Fobi4OEVFRbn0Y3vLli26+OKLFRMTo4YNG2rQoEH64osvKhyXm5ure++9V23btlVERIRatmypG264QYcOHaryvYuKijRs2DDFxsZq/fr1ta5P+byJ77//Xtddd50aN26svn37Ouw72cKFC3XBBRcoISFBERER6tKli+bNm1fhfdu2bathw4bps88+0znnnKPIyEi1a9dOr7/+eoVjv/nmG/Xv319RUVFq2bKlHn/8cS1cuFAWi8VhqFBVQ7Xatm3r9Ar/p59+qquuukqtW7dWRESEWrVqpXvvvbfCsIAxY8aoYcOG2rVrl4YMGaJGjRpp1KhR1b63dKKXonHjxho6dKiuvPJKZWRkOOxftGiRrrrqKknSwIED7UPP1qxZo7Zt22rbtm1au3atffvJSV9ubq4mTJigVq1aKSIiQh06dNDMmTNls9nsx/zyyy+yWCx6+umntWDBArVv314RERE6++yztWnTJof6zZ07196e5Y9ylbWxK9/j8uGCn3/+uSZOnKhmzZopOjpal19+uX7//Xen7QegdmbNmqWjR4/qlVdecUgoynXo0EH33HOP/Xlpaakee+wx+zmibdu2evDBB1VUVFTt55T/Hz91+GZlY/4HDBigbt262c/tDRo0UIcOHezzAteuXavevXsrKipKp512mv773/86vGd57Pnpp580ZswYxcXFKTY2VjfeeKMKCgpcbpuMjAxdeOGFGjhwoDp37lzhvFzV+fCXX35Rs2bNJEnTpk2rdKjwDz/8oCuvvFLx8fGKjIxUr169tGzZskrbzNl5sboYUNWciqVLl6pnz56KiopS06ZNdf3112vfvn0V6tewYUPt27dPw4cPV8OGDdWsWTP95S9/UVlZmcvtiPrBJdwgkJeXp0OHDskYo4MHD+qFF17Q0aNHdf3111f7um3btqlfv36KiYnRpEmTFBYWppdfflkDBgywn1Al6ejRo+rXr5+2b9+um266SWeddZYOHTqkZcuW6bffflPTpk0rvPfx48d12WWX6csvv9R///tfnX322XWu51VXXaWOHTvqySeflDGmyuPmzZunrl276tJLL1VoaKg++OAD3XnnnbLZbBo3bpzDsT/99JOuvPJK3XzzzRo9erReffVVjRkzRj179lTXrl0lSfv27bP/yJ48ebKio6P197//XREREXWu08mWLl2qgoICjR07Vk2aNNHGjRv1wgsv6LffftPSpUsdji0tLVV6err69u2rp59+Wg0aNHD6/hkZGbriiisUHh6ua6+9VvPmzdOmTZvsf5vzzz9fd999d4XhZ507d9bs2bN11113qWHDhnrooYckSYmJiZJOdMH3799f+/bt0+23367WrVtr/fr1mjx5sg4cOKDZs2c7lGPx4sU6cuSIbr/9dlksFs2aNUtXXHGFfv75Z4WFhen222/X/v37tXLlSv3jH/9wWi9Xv8fl7rrrLjVu3FhTp07VL7/8otmzZ2v8+PF66623nH4WgJr74IMP1K5dO5133nkuHX/LLbfotdde05VXXqk///nP2rBhg2bMmKHt27fr3XffdVu5Dh8+rGHDhmnkyJG66qqrNG/ePI0cOVIZGRmaMGGC7rjjDl133XX661//qiuvvFJ79+5Vo0aNHN7j6quvVkpKimbMmKGvvvpKf//735WQkKCZM2c6/fz9+/frk08+0WuvvSZJuvbaa/Xcc8/pxRdftA8lqup82KxZM82bN09jx47V5ZdfriuuuELS/4YKb9u2TX369FGLFi30wAMPKDo6Wv/85z81fPhw/etf/9Lll1/uUBZn58XqYkBlFi1apBtvvFFnn322ZsyYoezsbD3//PP6/PPPtWXLFsXFxdmPLSsrU3p6unr37q2nn35a//3vf/XMM8+offv2Gjt2rNN2RD0yCFgLFy40kio8IiIizKJFiyocL8lMnTrV/nz48OEmPDzc7Nq1y75t//79plGjRub888+3b5syZYqRZN55550K72mz2YwxxnzyySdGklm6dKk5cuSI6d+/v2natKnZsmVLjeq0dOlSI8l88skn9m1Tp041ksy1115b4fjyfScrKCiocFx6erpp166dw7Y2bdoYSWbdunX2bQcPHjQRERHmz3/+s33bXXfdZSwWi0Nd/vjjDxMfH28kmd27d9u3n9rGJ3/W6NGj7c/L2+vkelZW7hkzZhiLxWJ+/fVX+7bRo0cbSeaBBx6ocHxVvvzySyPJrFy50hhz4u/WsmVLc8899zgcV1n7l+vatavp379/he2PPfaYiY6ONj/++KPD9gceeMCEhISYPXv2GGOM2b17t5FkmjRpYnJycuzHvf/++0aS+eCDD+zbxo0bV+HvWq623+Py/y9paWn2760xxtx7770mJCTE5ObmVvp5AGovLy/PSDKXXXaZS8dv3brVSDK33HKLw/a//OUvRpJZvXq1fVv//v0dzknl/8dPPicbU/n5tn///kaSWbx4sX3bDz/8YCQZq9VqvvjiC/v2//znP0aSWbhwoX1beey56aabHD7r8ssvN02aNHGprk8//bSJiooy+fn5xhhjfvzxRyPJvPvuuw7HVXU+/P3336uMOYMGDTLdu3c3hYWF9m02m82cd955pmPHjvZtNTkvVhUDTm3f4uJik5CQYLp162aOHz9uP2758uVGkpkyZYp9W3k8mz59usN79ujRw/Ts2bPCZ8G7GP4UBObOnauVK1dq5cqVeuONNzRw4EDdcssteuedd6p8TVlZmT7++GMNHz5c7dq1s29v3ry5rrvuOn322WfKz8+XdGLM5xlnnFHhyoakCkOP8vLyNHjwYP3www9as2aNzjzzTPdUUtIdd9zh0nFRUVEO5Tl06JD69++vn3/+WXl5eQ7HdunSRf369bM/b9asmU477TT9/PPP9m0rVqxQamqqQ13i4+NdGnJUEyeX+9ixYzp06JDOO+88GWO0ZcuWCsfX5ApORkaGEhMTNXDgQEkn/m7XXHONlixZUucu5qVLl6pfv35q3LixDh06ZH+kpaWprKxM69atczj+mmuuUePGje3Py9v/5DZ3VU2+x+Vuu+02h+9tv379VFZWpl9//bXGnw+geuX//069wl+VDz/8UJI0ceJEh+1//vOfJcmtcy8aNmyokSNH2p+fdtppiouLU+fOnR16OMv/Xdk56tS41K9fP/3xxx8VzjuVycjI0NChQ+1t07FjR/Xs2bPCEKiaysnJ0erVq3X11VfryJEj9nPyH3/8ofT0dO3cubPCMCR3nhe//PJLHTx4UHfeeafDXIuhQ4eqU6dOlf4NK2vH2sQEeBbDn4LAOeec4zBR+9prr1WPHj00fvx4DRs2rNIVGX7//XcVFBTotNNOq7Cvc+fOstls2rt3r7p27apdu3ZpxIgRLpVlwoQJKiws1JYtW+zDh9wlJSXFpeM+//xzTZ06VZmZmRXGtubl5Sk2Ntb+vHXr1hVe37hxYx0+fNj+/Ndff1VqamqF405dOamu9uzZoylTpmjZsmUOny+pQjIUGhqqli1buvS+ZWVlWrJkiQYOHKjdu3fbt/fu3VvPPPOMVq1apcGDB9e63Dt37tQ333xjH997qoMHDzo8P7XNyxOMU+vsipp8jz3x+QCqFxMTI0k6cuSIS8f/+uuvslqtFc6vSUlJiouLc2vy37JlywoXxmJjY9WqVasK26TKzxHVnU/K616Z7du3a8uWLbrhhhv0008/2bcPGDBAc+fOVX5+frWvr85PP/0kY4weeeQRPfLII5Uec/DgQbVo0cKletRU+d+osvNyp06d9Nlnnzlsi4yMrBA/To3D8A0kFUHIarVq4MCBev7557Vz5063/7ivzmWXXaYlS5boqaee0uuvvy6r1X2dZSdfya/Krl27NGjQIHXq1EnPPvusWrVqpfDwcH344Yd67rnnHCYOS1JISEil72OqmbNRG856A8rKynThhRcqJydH999/vzp16qTo6Gjt27dPY8aMqVDuiIgIl9t29erVOnDggJYsWaIlS5ZU2J+RkVGnpMJms+nCCy/UpEmTKt3/f//3fw7P66vNq+LtzweCSUxMjJKTk/Xdd9/V6HW1ualpVa+p6vxb1bmgJueI2p5P3njjDUnSvffeq3vvvbfC/n/961+68cYbq32PqpTHi7/85S9KT0+v9JhTkzZvnher+mz4HpKKIFVaWirpxCTryjRr1kwNGjTQjh07Kuz74YcfZLVa7Vdr2rdv73JAGD58uAYPHqwxY8aoUaNGla665EkffPCBioqKtGzZMocrL5988kmt37NNmzYOV5LKVbatcePGys3NddhWXFysAwcOVPsZ3377rX788Ue99tpruuGGG+zbV65cWbtCnyQjI0MJCQn2FURO9s477+jdd9/V/PnzFRUVVW0gr2pf+/btdfToUaWlpdW5rM4+61Q1+R4D8I5hw4ZpwYIFyszMrLTX92Rt2rSRzWbTzp07He5VlJ2drdzcXLVp06bK15ZfXT/1HOxrQxuNMVq8eLEGDhyoO++8s8L+xx57TBkZGfakoqrzYVXby4eChoWFeeW8XP432rFjhy644AKHfTt27Kj2bwjfxpyKIFRSUqKPP/5Y4eHhDiflk4WEhGjw4MF6//33HZbfy87O1uLFi9W3b1971+uIESP09ddfV7rqRmVXMW644QbNmTNH8+fPr/IOoZ5SfsXj5HLl5eVp4cKFtX7P9PR0ZWZmauvWrfZtOTk5lY57bd++fYU5BAsWLHDaU1FZuY0xev7552tdbunEKlzvvPOOhg0bpiuvvLLCY/z48Tpy5Ih9mcHye12cGpTL91W2/eqrr1ZmZqb+85//VNiXm5trT3BrorpynKwm32MA3jFp0iRFR0frlltuUXZ2doX9u3btsp/rhgwZIkkVVo179tlnJZ0Yl1+V9u3bS5LDObisrMznbqr3+eef65dfftGNN95Y6Xn5mmuu0SeffKL9+/dLqvp8WL7q36nbExISNGDAAL388suVXtCq7RLaVcWAU/Xq1UsJCQmaP3++wzLAH330kbZv317t3xC+jZ6KIPDRRx/phx9+kHRinOTixYu1c+dOPfDAA9X+oHr88ce1cuVK9e3bV3feeadCQ0P18ssvq6ioSLNmzbIfd9999+ntt9/WVVddpZtuukk9e/ZUTk6Oli1bpvnz5+uMM86o8N7jx49Xfn6+HnroIcXGxurBBx90f8UrMXjwYIWHh+uSSy7R7bffrqNHj+pvf/ubEhISnPYWVGXSpEl64403dOGFF+quu+6yLynbunVr5eTkOFy9ueWWW3THHXdoxIgRuvDCC/X111/rP//5T6XL7p6sU6dOat++vf7yl79o3759iomJ0b/+9a86jyldtmyZjhw5oksvvbTS/eeee66aNWumjIwMXXPNNTrzzDMVEhKimTNnKi8vTxEREfZ7fvTs2VPz5s3T448/rg4dOighIUEXXHCB7rvvPi1btkzDhg2zL8d77Ngxffvtt3r77bf1yy+/OK3/qXr27ClJuvvuu5Wenq6QkBCHCZUnc/V7DMA72rdvr8WLF+uaa65R586dHe6ovX79ei1dutR+H58zzjhDo0eP1oIFC5Sbm6v+/ftr48aNeu211zR8+HD7YhOV6dq1q84991xNnjxZOTk5io+P15IlS2p1YcOTMjIyFBISUuWP60svvVQPPfSQlixZookTJ1Z5PoyKilKXLl301ltv6f/+7/8UHx+vbt26qVu3bpo7d6769u2r7t2769Zbb1W7du2UnZ2tzMxM/fbbb/r6669rXO6qYsCpwsLCNHPmTN14443q37+/rr32WvuSsm3btq10uBf8hFfWnEK9qGxJ2cjISHPmmWeaefPmOSwPZ0zly51+9dVXJj093TRs2NA0aNDADBw40Kxfv77CZ/3xxx9m/PjxpkWLFiY8PNy0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nXoUeLgsgO8iqQBcxORtAIGHoT3OudZGFosUHUNsQPBiTgWCWlmpRSVFNQuqA684rJJii/72WLKKjpOXAwAA1CqpmDp1qm666Sa1adPG3eUB6tXrf03SOwua1fh11hCjS288pA8WNWHyNnAS4oO/YfiTc9w9G3BFrS6zvv/++2rfvr0GDRqkxYsXq6ioyN3lAurF7/vDtXt7VI0fe36M1MDhhxkKBZyC+OBv+LHsHG0EuKJWScXWrVu1adMmde3aVffcc4+SkpI0duxYbdq0yd3lA3yWxSrmWACnID74G3oqnKtrGxlZrLQzAl+tB4T36NFDc+bM0f79+/XKK6/ot99+U58+fXT66afr+eefV15enjvLCfik8vtYkFgA/0N88CdchXeubm0UHmF02pmsCoXAV+dZpsYYlZSUqLi4WMYYNW7cWC+++KJatWqlt956yx1lBHwaq0IBlSM+ACd6tSOibN4uBuBxtU4qNm/erPHjx6t58+a699571aNHD23fvl1r167Vzp079cQTT+juu+92Z1kBn0WPBfA/xAd/wrAc52gjwBW1Siq6d++uc889V7t379Yrr7yivXv36qmnnlKHDh3sx1x77bX6/fff3VZQwNfRYwEQH/wPw5+co40AV9RqSdmrr75aN910k1q0aFHlMU2bNpXNRncfgovVeiKxkKR5U5NVeIzlZhFciA/+hqvwzrGkLOCKGvdUlJSUaNGiRcrPz/dEeQC/Zx8KNY0eCwQX4oM/4seycx5qI4uRNYSkDoGjxklFWFiYCgsLPVEWIGAwFArBiPgAuC66kU3tux33djEAt6nVnIpx48Zp5syZKi0tdXd5gIBRPhSKxALBhPjgb7hS7pxn2shiMQoLo/0ROGo1p2LTpk1atWqVPv74Y3Xv3l3R0dEO+9955x23FA7wd+VDoSRp3pRkFRYwxwKBjfjgbxj+5BxtBLiiVklFXFycRowY4e6yAAGpfCiURGKBwEd8AIDgVKukYuHChe4uBxDQ6LFAsCA++BuG3zjH6k+AK2qVVEhSaWmp1qxZo127dum6665To0aNtH//fsXExKhhw4buLCPgc4yRDv8eqt/3h9XodWedf0RXjzuot15IVFFhnW9oD/gk4oM/4ceyc/XbRlbriVWhSkuIEfAvtUoqfv31V1100UXas2ePioqKdOGFF6pRo0aaOXOmioqK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BpVvt1TZNlV8n6ppG1NW07ap5P9aNW1T3f81T7SN3NQ2JbYSWctsFdomIblA2u3eGGEx/hxx6slvv/2mVq1aebsYAFBje/fuVcuWLb1djID2888/q3379t4uBgDUmDtjBEmFC2w2m3bs2KEuXbpo7969Ab/SR35+vlq1akVdA0yw1DVY6ilVX1djjI4cOaLk5GRZrT67JkdAyM3NVePGjbVnzx7FxsZ6uzgexf+vwERdA1N9xwifvfmdL7FarWrRooUkBdXygdQ1MAVLXYOlnlLVdQ30H7i+ojwgx8bGBv13LhBR18BEXd0fI7h8BQAAAKBOSCoAAAAA1AlJhYsiIiI0depURUREeLsoHkddA1Ow1DVY6ikFV119WTD9HahrYKKugam+68pEbQAAAAB1Qk8FAAAAgDohqQAAAABQJyQVAAAAAOqEpAIAAABAnZBUuGDu3Llq27atIiMj1bt3b23cuNHbRaqRGTNm6Oyzz1ajRo2UkJCg4cOHa8eOHQ7HFBYWaty4cWrSpIkaNmyoESNGKDs72+GYPXv2aOjQoWrQoIESEhJ03333qbS0tD6rUmNPPfWULBaLJkyYYN8WSHXdt2+frr/+ejVp0kRRUVHq3r27vvzyS/t+Y4ymTJmi5s2bKyoqSmlpadq5c6fDe+Tk5GjUqFGKiYlRXFycbr75Zh09erS+q1KtsrIyPfLII0pJSVFUVJTat2+vxx57TCevM+GvdV23bp0uueQSJScny2Kx6L333nPY7656ffPNN+rXr58iIyPVqlUrzZo1y9NVCxrEiBP85bx5MmKEf543T0WM8JEYYVCtJUuWmPDwcPPqq6+abdu2mVtvvdXExcWZ7OxsbxfNZenp6WbhwoXmu+++M1u3bjVDhgwxrVu3NkePHrUfc8cdd5hWrVqZVatWmS+//NKce+655rzzzrPvLy0tNd26dTNpaWlmy5Yt5sMPPzRNmzY1kydP9kaVXLJx40bTtm1bc/rpp5t77rnHvj1Q6pqTk2PatGljxowZYzZs2GB+/vln85///Mf89NNP9mOeeuopExsba9577z3z9ddfm0svvdSkpKSY48eP24+56KKLzBlnnGG++OIL8+mnn5oOHTqYa6+91htVqtITTzxhmjRpYpYvX252795tli5daho2bGief/55+zH+WtcPP/zQPPTQQ+add94xksy7777rsN8d9crLyzOJiYlm1KhR5rvvvjNvvvmmiYqKMi+//HJ9VTNgESNO8Jfz5smIEf573jwVMcI3YgRJhRPnnHOOGTdunP15WVmZSU5ONjNmzPBiqerm4MGDRpJZu3atMcaY3NxcExYWZpYuXWo/Zvv27UaSyczMNMac+FJbrVaTlZVlP2bevHkmJibGFBUV1W8FXHDkyBHTsWNHs3LlStO/f397wAikut5///2mb9++Ve632WwmKSnJ/PWvf7Vvy83NNREREebNN980xhjz/fffG0lm06ZN9mM++ugjY7FYzL59+zxX+BoaOnSouemmmxy2XXHFFWbUqFHGmMCp66kBw131eumll0zjxo0dvr/333+/Oe200zxco8BHjPCv82Y5YkTgnDeNIUb4Soxg+FM1iouLtXnzZqWlpdm3Wa1WpaWlKTMz04slq5u8vDxJUnx8vCRp8+bNKikpcahnp06d1Lp1a3s9MzMz1b17dyUmJtqPSU9PV35+vrZt21aPpXfNuHHjNHToUIc6SYFV12XLlqlXr1666qqrlJCQoB49euhvf/ubff/u3buVlZXlUNfY2Fj17t3boa5xcXHq1auX/Zi0tDRZrVZt2LCh/irjxHnnnadVq1bpxx9/lCR9/fXX+uyzz3TxxRdLCqy6nsxd9crMzNT555+v8PBw+zHp6enasWOHDh8+XE+1CTzECP87b5YjRgTWeZMY4RsxIrSuFQpkhw4dUllZmcOJQ5ISExP1ww8/eKlUdWOz2TRhwgT16dNH3bp1kyRlZWUpPDxccXFxDscmJiYqKyvLfkxl7VC+z5csWbJEX331lTZt2lRhXyDV9eeff9a8efM0ceJEPfjgg9q0aZPuvvtuhYeHa/To0fayVlaXk+uakJDgsD80NFTx8fE+VdcHHnhA+fn56tSpk0JCQlRWVqYnnnhCo0aNkqSAquvJ3FWvrKwspaSkVHiP8n2NGzf2SPkDHTHC/86bEjGCGPE//ljXk/lajCCpCDLjxo3Td999p88++8zbRfGIvXv36p577tHKlSsVGRnp7eJ4lM1mU69evfTkk09Kknr06KHvvvtO8+fP1+jRo71cOvf65z//qYyMDC1evFhdu3bV1q1bNWHCBCUnJwdcXQFvIkYEDmIEMaK+MfypGk2bNlVISEiFVR+ys7OVlJTkpVLV3vjx47V8+XJ98sknatmypX17UlKSiouLlZub63D8yfVMSkqqtB3K9/mKzZs36+DBgzrrrLMUGhqq0NBQrV27VnPmzFFoaKgSExMDpq7NmzdXly5dHLZ17txZe/bskfS/slb3/U1KStLBgwcd9peWlionJ8en6nrffffpgQce0MiRI9W9e3f96U9/0r333qsZM2ZICqy6nsxd9fKX77S/IUb433mTGEGMOJk/1vVkvhYjSCqqER4erp49e2rVqlX2bTabTatWrVJqaqoXS1YzxhiNHz9e7777rlavXl2hi6tnz54KCwtzqOeOHTu0Z88eez1TU1P17bffOnwxV65cqZiYmAonLW8aNGiQvv32W23dutX+6NWrl0aNGmX/d6DUtU+fPhWWffzxxx/Vpk0bSVJKSoqSkpIc6pqfn68NGzY41DU3N1ebN2+2H7N69WrZbDb17t27HmrhmoKCAlmtjqerkJAQ2Ww2SYFV15O5q16pqalat26dSkpK7MesXLlSp512GkOf6oAY4X/nTWIEMaKcv9b1ZD4XI2o+9zy4LFmyxERERJhFixaZ77//3tx2220mLi7OYdUHXzd27FgTGxtr1qxZYw4cOGB/FBQU2I+54447TOvWrc3q1avNl19+aVJTU01qaqp9f/kSeoMHDzZbt241K1asMM2aNfO5JfQqc/LKHsYETl03btxoQkNDzRNPPGF27txpMjIyTIMGDcwbb7xhP+app54ycXFx5v333zfffPONueyyyypdaq5Hjx5mw4YN5rPPPjMdO3b0+hJ6pxo9erRp0aKFfbnAd955xzRt2tRMmjTJfoy/1vXIkSNmy5YtZsuWLUaSefbZZ82WLVvMr7/+aoxxT71yc3NNYmKi+dOf/mS+++47s2TJEtOgQQOWlHUDYsQJ/nLerAwxwv/Om6ciRvhGjCCpcMELL7xgWrdubcLDw80555xjvvjiC28XqUYkVfpYuHCh/Zjjx4+bO++80zRu3Ng0aNDAXH755ebAgQMO7/PLL7+Yiy++2ERFRZmmTZuaP//5z6akpKSea1NzpwaMQKrrBx98YLp162YiIiJMp06dzIIFCxz222w288gjj5jExEQTERFhBg0aZHbs2OFwzB9//GGuvfZa07BhQxMTE2NuvPFGc+TIkfqshlP5+fnmnnvuMa1btzaRkZGmXbt25qGHHnJY/s5f6/rJJ59U+v9z9OjRxhj31evrr782ffv2NREREaZFixbmqaeeqq8qBjxixAn+ct48FTHC/86bpyJG+EaMsBhz0u0GAQAAAKCGmFMBAAAAoE5IKgAAAADUCUkFAAAAgDohqQAAAABQJyQVAAAAAOqEpAIAAABAnZBUAAAAAKgTkgoAAAAAdUJSAQAAAKBOSCoADxgzZoyGDx/usO3tt99WZGSknnnmGe8UCgDgE4gRCESh3i4AEAz+/ve/a9y4cZo/f75uvPFGbxcHAOBDiBEIBPRUAB42a9Ys3XXXXVqyZIk9WLz//vs666yzFBkZqXbt2mnatGkqLS2VJN10000aNmyYw3uUlJQoISFBr7zySr2XHwDgOcQIBAp6KgAPuv/++/XSSy9p+fLlGjRokCTp008/1Q033KA5c+aoX79+2rVrl2677TZJ0tSpU3XLLbfo/PPP14EDB9S8eXNJ0vLly1VQUKBrrrnGa3UBALgXMQKBxGKMMd4uBBBoxowZozfffFPFxcVatWqVLrjgAvu+tLQ0DRo0SJMnT7Zve+ONNzRp0iTt379fktS1a1eNHj1akyZNkiRdeumlatKkiRYuXFi/FQEAuB0xAoGIpALwgDFjxmjbtm06dOiQWrZsqY8++kgNGzaUJDVr1kxHjx5VSEiI/fiysjIVFhbq2LFjatCggZ577jktWLBA27dvV3Z2tlq2bKnVq1erX79+3qoSAMBNiBEIRMypADykRYsWWrNmjfbt26eLLrpIR44ckSQdPXpU06ZN09atW+2Pb7/9Vjt37lRkZKQk6YYbbtDPP/+szMxMvfHGG0pJSSFYAEAAIUYg0DCnAvCgNm3aaO3atRo4cKAuuugirVixQmeddZZ27NihDh06VPm6Jk2aaPjw4Vq4cKEyMzNZDQQAAhAxAoGEpALwsFatWmnNmjUaOHCg0tPTdf/99+vKK69U69atdeWVV8pqterrr7/Wd999p8cff9z+ultuuUXDhg1TWVmZRo8e7cUaAAA8hRiBQMHwJ6AetGzZUmvWrNGhQ4f01FNP6e2339bHH3+ss88+W+eee66ee+45tWnTxuE1aWlpat68udLT05WcnOylkgMAPI0YgUDARG3ARx09elQtWrTQwoULdcUVV3i7OAAAH0KMgK9h+BPgY2w2mw4dOqRnnnlGcXFxuvTSS71dJACAjyBGwFeRVAA+Zs+ePUpJSVHLli21aNEihYby3xQAcAIxAr6K4U8AAAAA6oSJ2gAAAADqhKQCAAAAQJ2QVAAAAACoE5IKAAAAAHVCUgEAAACgTkgqAAAAANQJSQUAAACAOiGpAAAAAFAn/w/OKZBFd61svgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([8, 1024, 512])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Variant 2 from the paper, where they hardcode two head attention patterns\n",
    "# One head is triangular block sparse attention\n",
    "# The other is columnar attention on a few tokens\n",
    "class FixedSparseAttention(nn.Module): \n",
    "    def __init__(self, D=512, block_sz=5, col_stride=10):\n",
    "        super().__init__()\n",
    "        self.D = D\n",
    "        self.wq = nn.Linear(D,D)\n",
    "        self.wk = nn.Linear(D,D)\n",
    "        self.wv = nn.Linear(D,D)\n",
    "        self.wo = nn.Linear(D,D)\n",
    "        \n",
    "        self.head_dim = D//2\n",
    "        self.n_heads = D//self.head_dim \n",
    "        self.block_sz = block_sz\n",
    "        self.col_stride = col_stride\n",
    "\n",
    "    # rememner, we also need to include causal mask \n",
    "    def forward(self, x, plot=False): # BSD -> BSD \n",
    "        B, S, D = x.shape\n",
    "        \n",
    "        q, k, v = self.wq(x), self.wk(x), self.wv(x) # BSD -> BSD\n",
    "\n",
    "        # view as B, n_heads, S, head_dim\n",
    "        q = q.view(B, self.n_heads, S, self.head_dim)\n",
    "        k = k.view(B, self.n_heads, S, self.head_dim)\n",
    "        v = v.view(B, self.n_heads, S, self.head_dim)\n",
    "    \n",
    "        scores = torch.einsum('bnqd,bnkd->bnqk', q, k) # [batch, nheads, seq, seq] \n",
    "        \n",
    "        # KEY SPARSE ATTN COMPUTATIONS\n",
    "        # a \"block triangular mask\" like in the paper is just block diagonal + causal \n",
    "        num_blocks = (S + self.block_sz - 1) // self.block_sz  # Ceiling division\n",
    "        last_block_size = S - (num_blocks - 1) * self.block_sz\n",
    "        blocks = [torch.ones(self.block_sz, self.block_sz, device=x.device) for _ in range(num_blocks - 1)]\n",
    "        blocks.append(torch.ones(last_block_size, last_block_size, device=x.device))\n",
    "        block_mask = torch.block_diag(*blocks).bool() # reading torch docs is key because it's important \n",
    "        # to know functions like block_diag (other niche but important ones include things like scatter/gather/interleave/pad)\n",
    "\n",
    "        causal_mask = torch.arange(S, device=x.device)[:, None] >= torch.arange(S, device=x.device)\n",
    "        \n",
    "        # First head: block diagonal + causal\n",
    "        block_causal_mask = block_mask & causal_mask\n",
    "        \n",
    "        # Second head: strided columns + causal \n",
    "        col_mask = (0 * torch.arange(S, device=x.device)[:, None] + torch.arange(S, device=x.device)) % self.col_stride == 0\n",
    "        col_causal_mask = col_mask & causal_mask\n",
    "\n",
    "        # expand masks to batch dimension and add head dimension so we can match dims of scores\n",
    "        block_causal_mask = block_causal_mask.unsqueeze(0).unsqueeze(0).expand(B, 1, S, S)\n",
    "        col_causal_mask = col_causal_mask.unsqueeze(0).unsqueeze(0).expand(B, 1, S, S)\n",
    "        \n",
    "        # combine masks to match dim of scores, mask out using torch.where\n",
    "        overall_mask = torch.cat([block_causal_mask, col_causal_mask], dim=1)\n",
    "        masked_scores = torch.where(overall_mask, scores, torch.tensor(float('-inf'), device=scores.device))\n",
    "        A = F.softmax(masked_scores/(self.head_dim ** 0.5), dim=-1)\n",
    "\n",
    "        if plot:\n",
    "            import matplotlib.pyplot as plt\n",
    "            fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 8))\n",
    "            \n",
    "            ax1.imshow(block_causal_mask[0,0].cpu())\n",
    "            ax1.set_title('Block Triangular Attention')\n",
    "            ax1.set_xlabel('Key')\n",
    "            ax1.set_ylabel('Query')\n",
    "            \n",
    "            ax2.imshow(col_causal_mask[0,0].cpu())\n",
    "            ax2.set_title('Column Attention')\n",
    "            ax2.set_xlabel('Key') \n",
    "            ax2.set_ylabel('Query')\n",
    "            \n",
    "            plt.tight_layout()\n",
    "            plt.show()\n",
    "\n",
    "        # sanity checks \n",
    "        assert torch.allclose(A.sum(dim=-1), torch.ones_like(A.sum(dim=-1))), \"Attention weights don't sum to 1\"\n",
    "        assert torch.all((A > 0) == overall_mask), \"Attention weights don't match mask pattern\"\n",
    "        # END KEY SPARSE ATTN COMPUTATIONS\n",
    "\n",
    "        out = torch.einsum('bnqk,bnkd->bnqd', A, v)\n",
    "        # reshape from [batch, n_heads, seq, head_dim] back to [batch, seq, dim], this cats head outputs\n",
    "        out = out.view(B, S, D)\n",
    "        \n",
    "        return self.wo(out)\n",
    "\n",
    "block_sz = 50\n",
    "col_stride = 20\n",
    "B, S, D = 8, 1024, 512\n",
    "attn = FixedSparseAttention(D, block_sz=block_sz, col_stride=col_stride)\n",
    "x = torch.randn(B, S, D)\n",
    "attn(x, plot=True).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Cxeqa9euSkpK8hirUKGCHnzwQa1Zs8b0ra5vv/12js9t+/rrr5WSkqLBgwcrMTHRY6xTp066/vrrNX78+BxrlS5dWgMGDPCIPfDAA5KUa5dVu0aMGCHp77e3ZuvSpYu7WYS3HDlyRN9++61uvvlm9ezZ02OsSJEiGjBggA4fPqzffvstx9zBgwcrKirK/feKFSuqUaNG2rhxo06ePHlR+xo9erSkv7925zcrKFmypPr166eMjAz95z//yTGvc+fOatSokfvv/v7+6tq1q6T8fX3uv/9+BQYGup/zffv2acaMGbrvvvtybaJw/l1c2YoWLaqOHTtq8+bN2rlzp8dYYGCgAgMDc8wpWLCg6fpbt251P9dTp051N3CxY8KECXrppZf00ksv6ZFHHlHFihW1bt061alTx/3ZdGaPIyAgQA8//LAyMzMt37Jr18V8H7788ssqUKCA6brh4eF666235Of3v5f3Xbt2VUBAgOn3g9nnO0ZERCg4ONjuQwIAAF7AW1wBAPAxixcvliQdPHjQ9HPcNmzY4P5v9tvWJCkkJETVq1e3XO+PP/7Q1q1bc4yfO3dOR44c0ZEjRzy60NaqVcvjYl+S+3PIkpOT7T0oCwcOHNBPP/2kcuXKqWHDhu74nXfeqT59+mj06NF69dVX5e/vf9HnWrp0qTIzM5Wammr6vG7evFnS38/rhd1Ma9euneP485+LyMjIfO9r5cqVCgsLU7169XKMNWvWTJK0atWqHGP/tCe7ihQpojZt2mj8+PEaNmyYRo8erczMTPXo0SPXedu2bdPgwYP1+++/a+/evUpNTfUY37dvn7sw3KlTJw0cOFDVqlVT586d1axZM914440exc/zbdiwQY0aNVJGRoZ+//33HG/rzquJEye6P+MuLCxMZcuW1b///W89+eST7uLjyZMn9e6772ry5MnaunWrTp8+neNxeMPFfB+afY9kq1ChgiIiIjxi2W9zP//7oXHjxipatKjefPNNrV69WrfddpuaNGmiypUrm34+IgAAuDwo0AEAYFP2hfqF3S695dixY5Kkn376KdeumRcWEIoUKWJ6gZ293scff5zreU+fPu1RoDMrmgQE/P3SITMzM9e18mr06NHKyMjw+Ky57HO3a9dO48eP1/Tp09WmTZuLPlf287BgwQItWLDA8rgLn9fs/VzIW89FSkqKSpQoYTpWtGhR9zGXY089evTQ5MmTNXHiRI0cOVK1a9dWjRo1LI/fsmWL6tWrp5SUFDVr1ky33367oqKi5Ofn5/6MxfMLdk8++aQKFiyo4cOHa8iQIXr33XcVEBCgNm3aaNiwYTnuYtu0aZOOHz+uhg0behSj7Ro3bpxHF9cLpaWlqWnTplqxYoWuu+463X///SpYsKACAgK0Y8cOjR49OkfhMb8u5vsw+zMlzVgVOQMCAjy+H6Kjo7V48WK9+OKLmjZtmn7++WdJUokSJfT000/r0UcfzdPjAAAA3kWBDgAAm7K7ItatW/eSrJ99of3hhx+qd+/eeZ5ndfdL9npr1qy5qCLHpZD9dspBgwa5u9peaMSIEV4p0GU/D0888YTefffdi17PW6KionTo0CHTsQMHDriPuRxat26tokWL6qmnntLevXtzdKq90LBhw3T8+HGNGTMmx1tPH374Yc2dO9cj5nK51KNHD/Xo0UNHjx7Vf//7X40bN07fffedNm/erD///NPjbsm2bduqdOnSeumll9S6dWv9/PPPCg8P994D/n9TpkzRihUr9MADD+jLL7/0GBs/frz7bcjecDHfh966w61kyZIaNWqUsrKy9Oeff2rmzJn64IMP1KtXL8XGxuqee+7xynkAAEDe8Rl0AADYsGnTJn333XcKDg5Whw4dLsk5st/Gt2jRIp9cz4y/v7/tu7b++9//atOmTSpbtqweeOAB0z+FCxfWjz/+6FHA8vPzszxXdnHHbLxu3bpyuVyX/HmwOr+V6667TmfOnNGSJUtyjGUXg806gV4K/v7+6tKli/bu3auQkJB/LNRkv2X6/E6t0t+daXO7O0z6+zPn2rdv7/48tnXr1mnLli05jhs0aJBeffVVzZs3T61atdKpU6dsPqp/ZvU4pL+/T8348vdhXvn5+alWrVoaOHCgxo0bJ+nv7sAAAODyo0AHAEAeLViwQElJSUpNTdXTTz+t4sWLX5Lz1KtXTzfccIPGjRunb7/9Nsd4VlZWjjuTctO9e3dFRkbqueee09q1a3OMnzlzxv05dflVoEABHTlyROfOncvznOzmEM8995y+/PJL0z89e/ZUenq6vv76a49z7dmzx3IfkrR79+4cY/Hx8brrrru0cOFCvfPOOzIMI8cxf/zxh86cOZPnx2Dn/FayGzs888wzSk9Pd8d3796toUOHKiAgQPfee2++92RX//799cMPP2jGjBmKiYnJ9djsz5abP3++R/zNN980bWIyZ86cHM97enq6+22fISEhpud5/vnn9frrr+u///3vJSnSWT2OuXPn6osvvjCd48vfh7lZu3atDh48mCOeHbP6GgAAgEuLt7gCAHCBLVu2uD+8PS0tTYcOHdKSJUu0Zs0a+fv76/nnn7d8O6a3jBs3Ts2aNVOnTp303nvv6frrr1doaKh27dqlRYsW6fDhw3kuhhUuXFjjxo3TnXfeqZo1a+rWW29VpUqVlJqaqh07dmju3Llq2LChpk+fnu/93nzzzVq2bJlatWqlm266SUFBQWrcuLEaN25senxKSoq+//57hYeH684777Rct1u3bho8eLBGjBihJ5980n2u7777Tu3bt9d1110nf39/tW3bVjVq1FCDBg0UGhqq9957T8ePH3d/TuDzzz8vSfrkk0+0ceNGDRw4UGPGjFGDBg0UExOj3bt3a9myZdq8ebP279+vsLCwfD0PzZo1k8vl0rPPPqu1a9cqOjpaMTExub5V+f7779ekSZM0ZcoU1ahRQ7fddptOnz6tb7/9VseOHdOQIUNUpkyZfO0nP4oUKaL27dvn6diHH35YI0eOVMeOHXXXXXepYMGCWrx4sVasWKE2bdrk+AzF9u3bKyoqSvXr11diYqLS09P166+/at26dbrjjjtydBk+37PPPis/Pz8988wzuvXWWzV9+vQcTRHy6/bbb1epUqX09ttv66+//lK1atW0ceNG/fjjj+rQoYMmTJiQY44vfx/m5tdff9WAAQPUqFEjVahQQQULFtS2bds0depUhYSEqFevXl4/JwAA+GcU6AAAuMDWrVv18ssvS5JCQ0MVExOjSpUq6YUXXlDXrl1VtmzZS76H0qVLa+XKlRo6dKgmT56skSNHyt/fX0WLFlXjxo11xx132FqvTZs2Wrlypd555x399ttv+vXXXxUeHq6EhAR17949x+eH2fXCCy/o+PHj+vHHH/Xf//5XmZmZGjRokGWBbvz48Tpz5oy6du2aa5GlQoUKatSokRYsWKCFCxeqYcOGev/99yVJv//+u6ZNm6asrCwlJCSoRo0aKlCggCZMmKCXXnpJX3zxhc6ePSvpf4WRAgUKaOHChfroo4/07bff6j//+Y+ysrIUHx+vmjVr6oUXXvBolGFXlSpVNHLkSA0ZMkQf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rl1Ob/GacvDgQT355JOqVKmSwsLCFB4ertq1a+u1115TcnKy09sD4KA1a9bojjvuUGJiokJCQlS8eHHdcsst+vDDDz2Oe+ONNzR58mRnNnkZXEvXTr7qhx9+UKtWrVSoUCEFBQWpWLFiuuuuu/T77787vTVcYQKc3gBwvp9++kl33nmngoOD1aVLF1WrVk1paWmaP3++BgwYoLVr1+rzzz93epteFxwcrHHjxmngwIEe8UmTJjm0IwDIn1deeUWlS5eWYRg6ePCgRo0apdatW2vatGm67bbbnN5ent1zzz1q3bq1srKydPz4cS1dulTvvfee3n//fY0YMUKdOnVyH9u4cWOdPXtWQUFBDu746rN06VK1bt1ap06d0n333afatWtLkpYtW6Y333xT8+bN08yZMx3eJQAnLFy4UM2aNVPJkiX14IMPKj4+Xrt379bixYv1/vvvq0+fPu5j33jjDd1xxx1q3759ntd//vnn9fTTT1+CnXvXtXrt5CsMw1CPHj00atQoXXfdderfv7/i4+O1f/9+/fDDD2revLkWLFighg0bOr1VXCEo0MFnbN++XZ06dVJiYqJ+//13FS1a1D3Wq1cvbdmyRT/99JODO7x0WrdubVqgGzt2rNq0aaOJEyc6tDMAsKdVq1aqU6eO++8PPPCA4uLiNG7cuCuqQHf99dfrvvvu84jt3LlTLVu2VNeuXVW5cmXVrFlTkuTn56eQkBAntunzmjZtqlKlSmnUqFG25iUnJ6tDhw7y9/fXypUrValSJY/x119/XV988YUXdwrgSvL6668rOjpaS5cuVUxMjMfYoUOH8r3u6dOnFR4eroCAAAUE+Pal8rV87eRNc+bMUbNmzbR9+3aVKlXK1twhQ4Zo1KhR6tu3r4YOHerxtujnnntOY8aM8fnvI/gW3uIKn/H222/r1KlTGjFihEeCyVauXDk9/vjj7r+PHDlSN998s4oUKaLg4GBVqVJFw4cPzzHP6nMhSpUqpW7durn/np6erpdfflnly5dXSEiIChYsqBtvvFG//vqr+5g///xT3bp1c99CHh8frx49eujo0aMX9dg7d+6sVatWacOGDe7YgQMH9Pvvv6tz5845jk9LS9OLL76o2rVrKzo6WuHh4brppps0e/bsHMeOHz9etWvXVmRkpKKiolS9enW9//77ue7n+PHjqlevnhISErRx48aLemwArm0xMTEKDQ3N0wvUlStXqlWrVoqKilJERISaN2+uxYsX5zguOTlZ/fr1U6lSpRQcHKyEhAR16dJFR44csVw7NTVVt912m6Kjo7Vw4cJ8PZbExESNGjVKaWlpevvtt91xs88L+u9//6s777xTJUuWVHBwsEqUKKF+/fqZvt3o+++/V5UqVRQSEqJq1arphx9+ULdu3XJcKJw+fVpPPPGESpQooeDgYFWsWFHvvvuuDMPwOC77YxEmT56satWqKTg4WFWrVtX06dM9jtu5c6ceffRRVaxYUaGhoSpYsKDuvPNOn/j81M8++0x79+7V0KFDcxTnJCkuLk7PP/+8++9TpkxRmzZtVKxYMQUHB6ts2bJ69dVXlZmZ6THvwtyfzeyzdz788ENVrVpVYWFhio2NVZ06dTR27Fj3uC8/f8DVbuvWrapatWqO4pwkFSlSxP3/LpdLp0+f1ujRo90fXZD9MyD7o2bWrVunzp07KzY2VjfeeKPH2PlSU1PVr18/FS5cWJGRkWrbtq327Nljur+9e/eqR48eiouLc/8M/uqrr3Ict2fPHrVv317h4eEqUqSI+vXrp9TU1Dw9B3avnTIyMvTqq6+qbNmyCg4OVqlSpfTss8/+4/msPlvbLPc1bdpU1apV059//qkmTZooLCxM5cqVc38m7Ny5c3XDDTcoNDRUFStW1G+//eaxZvbzvmXLFnXr1k0xMTGKjo5W9+7ddebMGY9jf/31V914442KiYlRRESEKlasqGeffTYvT51XnD17VoMHD1alSpX07rvvmn5m4f3336969epJko4dO6Ynn3xS1atXV0REhKKiotSqVSutXr3aY46d53vz5s3q2LGj4uPjFRISooSEBHXq1EknTpxwH5PXa2b4Bsq58BnTpk1TmTJl8nwL8PDhw1W1alW1bdtWAQEBmjZtmh599FFlZWWpV69ets//0ksvafDgwerZs6fq1aunlJQULVu2TCtWrNAtt9wi6e9EsG3bNnXv3l3x8fHu28bXrl2rxYsX5/nDZC/UuHFjJSQkaOzYsXrllVckSd9++60iIiLUpk2bHMenpKToyy+/1D333KMHH3xQJ0+e1IgRI5SUlKQlS5aoVq1a7v3ec889at68ud566y1J0vr167VgwQKPhH2+I0eO6JZbbtGxY8c0d+5clS1bNl+PCcC16cSJEzpy5IgMw9ChQ4f04Ycfut+imJu1a9fqpptuUlRUlAYOHKjAwEB99tlnatq0qfsFvSSdOnVKN910k9avX68ePXro+uuv15EjRzR16lTt2bNHhQoVyrH22bNn1a5dOy1btky//fab6tatm+/H16BBA5UtW9bjlzdmvv/+e505c0aPPPKIChYsqCVLlujDDz/Unj179P3337uP++mnn3T33XerevXqGjx4sI4fP64HHnhAxYsX91jPMAy1bdtWs2fP1gMPPKBatWppxowZGjBggPbu3athw4Z5HD9//nxNmjRJjz76qCIjI/XBBx+oY8eO2rVrlwoWLCjp77eQLly4UJ06dVJCQoJ27Nih4cOHq2nTplq3bp3CwsLy/TxdrKlTpyo0NFR33HFHno4fNWqUIiIi1L9/f0VEROj333/Xiy++qJSUFL3zzju2z//FF1/oscce0x133KHHH39c586d059//qk//vjD/YszX37+gKtdYmKiFi1apL/++kvVqlWzPG7MmDHu1/b//ve/JSnHa9s777xT5cuX1xtvvJHjFx7n69mzp7755ht17txZDRs21O+//276Ov3gwYOqX7+++5clhQsX1i+//KIHHnhAKSkp6tu3r6S/c1Pz5s21a9cuPfbYYypWrJjGjBmT588ts3vt1LNnT40ePVp33HGHnnjiCf3xxx8aPHiw1q9frx9++CFPa+TF8ePHddttt6lTp0668847NXz4cHXq1En/+c9/1LdvXz388MPq3Lmz3nnnHd1xxx3avXu3IiMjPda46667VLp0aQ0ePFgrVqzQl19+qSJFirivZ9auXavbbrtNNWrU0CuvvKLg4GBt2bJFCxYs8Nrj+Cfz58/XsWPH1LdvX/n7+//j8du2bdPkyZN15513qnTp0jp48KA+++wzNWnSROvWrVOxYsVsnT8tLU1JSUlKTU1Vnz59FB8fr7179+rHH39UcnKyoqOjJXn/mhmXmAH4gBMnThiSjHbt2uV5zpkzZ3LEkpKSjDJlynjEJBmDBg3KcWxiYqLRtWtX999r1qxptGnTxvY5x40bZ0gy5s2b546NHDnSkGRs37491/UGDRpkSDIOHz5sPPnkk0a5cuXcY3Xr1jW6d+/ufgy9evVyj2VkZBipqakeax0/ftyIi4szevTo4Y49/vjjRlRUlJGRkWG5h+y9Ll261Ni/f79RtWpVo0yZMsaOHTty3TsAnC/7Z8mFf4KDg41Ro0blOP7Cn83t27c3goKCjK1bt7pj+/btMyIjI43GjRu7Yy+++KIhyZg0aVKONbOysgzDMIzZs2cbkozvv//eOHnypNGkSROjUKFCxsqVK//xcWzfvt2QZLzzzjuWx7Rr186QZJw4ccLjfLNnz3YfY5YvBg8ebLhcLmPnzp3uWPXq1Y2EhATj5MmT7ticOXMMSUZiYqI7NnnyZEOS8dprr3mseccddxgul8vYsmWLOybJCAoK8oitXr3akGR8+OGHue5x0aJFhiTj66+/dsfMHl9eNWnSxCPX5lVsbKxRs2bNPB9v9lgeeughIywszDh37pw7dmHuP3+fTZo0cf+9Xbt2RtWqVW2f09vPHwBzM2fONPz9/Q1/f3+jQYMGxsCBA40ZM2YYaWlpOY4NDw83/Xef/Tr8nnvusRzLtmrVKkOS8eijj3oc17lz5xz57IEHHjCKFi1qHDlyxOPYTp06GdHR0e6fHe+9954hyfjuu+/cx5w+fdooV67cP/7MsHvtlL3/nj17esSffPJJQ5Lx+++/u2MX/jy0uq4x+9nWpEkTQ5IxduxYd2zDhg2GJMPPz89YvHixOz5jxgxDkjFy5Eh3LPt5P/96xjAMo0OHDkbBggXdfx82bJj7GupiZT+Of7puu9D7779vSDJ++OGHPB1/7tw5IzMz0yO2fft2Izg42HjllVfcsbw+3ytXrnS/1slNXq+ZL/y6wxm8xRU+ISUlRZJy/PYkN6Ghoe7/z75jo0mTJtq2bZvHbb15FRMTo7Vr12rz5s15Oue5c+d05MgR1a9fX5K0YsUK2+c8X+fOnbVlyxYtXbrU/V+zt7dKkr+/v/vDyLOysnTs2DFlZGSoTp06HvuIiYnR6dOn//FOD+nvW+ybNGmi9PR0zZs3T4mJiRf1eABcmz7++GP9+uuv+vXXX/XNN9+oWbNm6tmzZ65NbzIzMzVz5ky1b99eZcqUcceLFi2qzp07a/78+e48MXHiRNWsWVMdOnTIsc6FdzGfOHFCLVu21IYNGzRnzhz33cUXKyIiQpJ08uRJy2POzxenT5/WkSNH1LBhQxmGoZUrV0qS9u3bpzVr1qhLly7uNSWpSZMmql69usd6P//8s/z9/fXYY495xJ944gkZhpGjU26LFi087hKpUaOGoqKitG3bNtM9pqen6+jRoypXrpxiYmLyldPS09N15MgRjz/p6elKTU3NEc/Kysp1rZSUlHy/Jjh58qSOHDmim266SWfOnPH4+Ii8iomJ0Z49e7R06dI8ndMbzx+AvLvlllu0aNEitW3bVqtXr9bbb7+tpKQkFS9eXFOnTrW11sMPP/yPx/z888+SlONncPbdcNkMw9DEiRN1++23yzAMj597SUlJOnHihPvnw88//6yiRYt63CkcFhbmvtMvN3avnbL3379/f4/4E088IUle/ay6iIgIj0ZKFStWVExMjCpXruy+G16S+//Pz0vZLvya3HTTTTp69Kj7cWe/tXnKlCn/mE8ulH3dmP0n+7rx+PHjHvFTp07luo7dr0FwcLD8/P4uv2RmZuro0aPut+bmJ2dk3yE3Y8aMHG//PZ+3r5lxaVGgg0+IioqSlPvFzoUWLFigFi1aKDw8XDExMSpcuLD7cwfy88PmlVdeUXJysipUqKDq1atrwIAB+vPPPz2OOXbsmB5//HHFxcUpNDRUhQsXVunSpfN9zvNdd911qlSpksaOHav//Oc/io+P180332x5/OjRo1WjRg335+UVLlxYP/30k8c+Hn30UVWoUEGtWrVSQkKCevTokeMziLLdf//9OnTokObOnZvjrVUAkFf16tVTixYt1KJFC91777366aefVKVKFfXu3VtpaWmmcw4fPqwzZ86oYsWKOcYqV66srKws7d69W9LfnzuU29uZzte3b18tXbpUv/32m6pWrZr/B3WB7Bftub0o37Vrl7p166YCBQooIiJChQsXVpMmTST9L1/s3LlT0t+fE3ShC2M7d+5UsWLFcpyzcuXKHmtlK1myZI41Y2Njdfz4cfffz549qxdffNH9mXaFChVS4cKFlZycnK+ctmDBAhUuXNjjz8KFCzV+/Pgc8V27duW6VlRUlK3XBGvXrlWHDh0UHR2tqKgoFS5c2P226vw8lqeeekoRERGqV6+eypcvr169euV465S3nz8A9tStW1eTJk3S8ePHtWTJEj3zzDM6efKk7rjjDq1bty7P62S/ls/Nzp075efnl+PtsRfmrcOHDys5OVmff/55jp973bt3l/S/JhY7d+5UuXLlcvxyySwXXsjutVP2/i/MLfHx8YqJicmRQy5GQkJCjscUHR2tEiVK5IhJ8shL2S7MYbGxsR7H3n333WrUqJF69uypuLg4derUSd99912einXt2rXz+Lpkd/e9/vrrPeK9e/fOdR27X4OsrCwNGzZM5cuX98gZf/75Z75yRunSpdW/f399+eWXKlSokJKSkvTxxx/nWMvb18y4tPgMOviEqKgoFStWTH/99Veejt+6dauaN2+uSpUqaejQoSpRooSCgoL0888/a9iwYXn64XzhB0c3btxYW7du1ZQpUzRz5kx9+eWXGjZsmD799FP17NlT0t+fh7Bw4UINGDBAtWrVUkREhLKysnTrrbfa/u2Nmc6dO2v48OGKjIzU3Xff7f4ty4W++eYbdevWTe3bt9eAAQNUpEgR+fv7a/Dgwdq6dav7uCJFimjVqlWaMWOGfvnlF/3yyy8aOXKkunTpotGjR3us+a9//Utff/213n//fQ0ePPiiHwsASH93OG3WrJnef/99bd682auFsn/Srl07jR8/Xm+++aa+/vpry5+pdv31118qUqSI+8X5hTIzM92f5fnUU0+pUqVKCg8P1969e9WtWzev5It/YvV5OMZ5n6/Up08fjRw5Un379lWDBg0UHR0tl8ulTp065WuPNWvWzHHH9hNPPKH4+HgNGDDAIx4fH5/rWpUqVdKqVauUlpbmvmPcSnJyspo0aaKoqCi98sorKlu2rEJCQrRixQo99dRTHo/F6rNiMzMzPZ6zypUra+PGjfrxxx81ffp0TZw4UZ988olefPFFvfzyy5K8//wByJ+goCDVrVtXdevWVYUKFdS9e3d9//33GjRoUJ7mn3+H0cXK/rd/3333qWvXrqbH1KhR46LPY/faKVt+Pi87t5+bZqzyT17yUl6PDQ0N1bx58zR79mz99NNPmj59ur799lvdfPPNmjlzZq6fCTdkyBCPouDq1av15JNP6ptvvlFcXJw7/k+fCZfdwGjNmjXuIl9u3njjDb3wwgvq0aOHXn31VRUoUEB+fn7q27dvnvOU2WPp1q2b+/r1scce0+DBg7V48WIlJCR45ZoZlxcFOviM2267TZ9//rkWLVqkBg0a5HrstGnTlJqaqqlTp3r8hsWsi2lsbKySk5M9Ymlpadq/f3+OYwsUKKDu3bure/fuOnXqlBo3bqyXXnpJPXv21PHjxzVr1iy9/PLLevHFF91zcntLrF2dO3fWiy++qP3792vMmDGWx02YMEFlypTRpEmTPH6Im70QCQoK0u23367bb79dWVlZevTRR/XZZ5/phRde8PgtWp8+fVSuXDm9+OKLio6O1tNPP+21xwXg2paRkSFJlm8XKVy4sMLCwky7Rm/YsEF+fn7u37yXLVs2zxck7du3V8uWLdWtWzdFRkZ6pWvZokWLtHXr1lybXqxZs0abNm3S6NGj1aVLF3f8wuJV9kcJbNmyJccaF8YSExP122+/6eTJkx530WW/fTM/H0swYcIEde3aVUOGDHHHzp07lyNn5lVsbKxatGiRI1a0aNEc8X9y++23a9GiRZo4caLuueeeXI+dM2eOjh49qkmTJqlx48bu+Pbt2033aPb4du7c6fH2akkKDw/X3XffrbvvvltpaWn617/+pddff13PPPOMQkJCvP78Abh4derUkSSP1/n5beJ2vsTERGVlZWnr1q0ed7hdmLeyO7xmZmb+48+9xMRE/fXXXzIMw2OPZrnQjJ1rp+z9b9682X3ntfR3Q4vk5ORcc0j23WsX/mzz5l13+eHn56fmzZurefPmGjp0qN544w0999xzmj17dq7Pfe3atT3+nt1lvlGjRjm6p+fmxhtvVGxsrMaNG6dnn332HxtFTJgwQc2aNdOIESM84snJyR4Nruw+39WrV1f16tX1/PPPa+HChWrUqJE+/fRTvfbaa7aumeEbeIsrfMbAgQMVHh6unj176uDBgznGt27dqvfff1/S/36rcv5vXE6cOKGRI0fmmFe2bFnNmzfPI/b555/n+C3E0aNHPf4eERGhcuXKuVuPm51Tkt577728PLw8KVu2rN577z0NHjzY3ZLbjNle/vjjDy1atMjjuAsfk5+fn/u3dmYt1V944QU9+eSTeuaZZ2i/DcAr0tPTNXPmTAUFBXlcFJzP399fLVu21JQpU7Rjxw53/ODBgxo7dqxuvPFG991qHTt21OrVq007zpn9Fr5Lly764IMP9Omnn+qpp566qMeyc+dOdevWTUFBQTnuCLvw8Vy4H8Mw3DksW7FixVStWjV9/fXXHsXLuXPnas2aNR7Htm7dWpmZmfroo4884sOGDZPL5VKrVq1sPx5/f/8cz9mHH35oeVfE5fTwww+raNGieuKJJ7Rp06Yc44cOHdJrr70myfz5TktL0yeffJJjXtmyZbV48WKPt1v/+OOP7rdQZ7swfwYFBalKlSoyDEPp6enu8/rq8wdc7WbPnm36Mz/7s9bOL6KFh4dfdOE8+2fsBx984BG/8DrA399fHTt21MSJE01/mXT48GH3/7du3Vr79u3ThAkT3LEzZ87o888/z9Oe7Fw7tW7d2nS/Q4cOlSTTbrTZst/We/71VGZmZp73eSkcO3YsRyz7c2bNrnEuhbCwMD311FNav369nnrqKdPvx2+++UZLliyRZJ4zvv/+e+3du9cjltfnOyUlxf0L0GzVq1eXn59frtevVtfM8A3cQQefUbZsWY0dO1Z33323KleurC5duqhatWpKS0vTwoUL9f3336tbt26SpJYtW7rvDHvooYd06tQpffHFFypSpEiOO+N69uyphx9+WB07dtQtt9yi1atXa8aMGR6/qZCkKlWqqGnTpqpdu7YKFCigZcuWacKECe7PH4iKilLjxo319ttvKz09XcWLF9fMmTNNf0N/MR5//PF/POa2227TpEmT1KFDB7Vp00bbt2/Xp59+qipVqnhc5PXs2VPHjh3TzTffrISEBO3cuVMffvihatWqZXmh/M477+jEiRPq1auXIiMjc71LBAAu9Msvv7jv6jp06JDGjh2rzZs36+mnn7Z8S6gkvfbaa/r1119144036tFHH1VAQIA+++wzpaam6u2333YfN2DAAE2YMEF33nmnevToodq1a+vYsWOaOnWqPv30U9WsWTPH2r1791ZKSoqee+45RUdHuz97JTcrVqzQN998o6ysLCUnJ2vp0qWaOHGiXC6XxowZk+tblCpVqqSyZcvqySef1N69exUVFaWJEyeafs7OG2+8oXbt2qlRo0bq3r27jh8/ro8++kjVqlXz+Hl+++23q1mzZnruuee0Y8cO1axZUzNnztSUKVPUt2/fHJ+LlBe33XabxowZo+joaFWpUkWLFi3Sb7/9poIFC9pey9tiY2P1ww8/qHXr1qpVq5buu+8+910PK1as0Lhx49x3jDRs2FCxsbHq2rWrHnvsMffXyOxiqWfPnpowYYJuvfVW3XXXXdq6dau++eabHM9fy5YtFR8fr0aNGikuLk7r16/XRx99pDZt2rjvYPTl5w+42vXp00dnzpxRhw4dVKlSJff1wrfffqtSpUq5P+9N+vuOqd9++01Dhw5VsWLFVLp0aY9mBXlRq1Yt3XPPPfrkk0904sQJNWzYULNmzTK9A/rNN9/U7NmzdcMNN+jBBx9UlSpVdOzYMa1YsUK//fabu7j04IMP6qOP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uuuuuzRz5kytX7/eUay57rrr9NBDD2natGl64okn1LBhQ0lSw4YNNXXqVI0YMUKRkZH629/+JkmKjY2VJP3222+6/vrrtX//ft1///2qUaOG1q1bp8cff1wHDx7U1KlTneKYO3euTpw4ofvvv182m02TJk1Snz59tHv3boWEhOj+++/XgQMHtGLFCr399tuX/FxbtmzRtddeq+joaD366KMKCQnR7Nmz1bFjR61atSrfensjRoxQhQoVNG7cOO3Zs0dTp07V8OHD9d577xV4nWuuuUZffvml9uzZo1q1akk6X4QbMmSI2rZtq3Hjxuno0aMqX768jDFat26dkpKSFBR0/h6k+++/XykpKRo0aJAeeughZWZmavr06dq0aZPWrl2rkJAQl9c9deqUbrjhBh08eFAjR45UXFyc5s6dqy+++MLl+UeOHNHNN9+sPn366I477tD777+vv/71r2ratKm6du2qhg0b6qmnntLYsWN133336dprr5UktW/f/pLfNSzIAF40YMAAExERUahzJZlx48aVbEBuXH/99eb666/3ybU9df3115vGjRsXa4yuXbuaIUOGeCmikjVu3Djjzanp8OHDply5cmbp0qVeGxNA6UYu8j5yUfGQiwBr2bBhg5FkVqxYYYwxxm63m/j4eDNy5Ein8xYsWGAkmS+++CLfGI0bN3aZI55++mkTERFhfvzxR6f2xx57zAQHB5u9e/caY4zJzMw0kkylSpXMr7/+6jjvww8/NJLMRx995GgbNmyY2znv4jzZq1cvExoaanbt2uVoO3DggImKijLXXXedo23OnDlGkunSpYux2+2O9tGjR5vg4GBz9OhRl9e7YOnSpUaSefvtt40xxhw8eNBIMqtWrTInTpwwwcHBjjn1hx9+MJLMs88+a4wx5ssvvzSSzLvvvus05rJly/K1X5yLJ0+ebCSZxYsXO9pOnz5tGjRokO/P6vrrrzeSzFtvveVoO3v2rImLizN9+/Z1tK1fv95IMnPmzCnwMwM84urndu3apfvvv1+1a9dWeHi4oqOj1aFDB73yyis6ffq0r8Pze7Vq1ZLNZlOXLl1c9v/jH/9w3Ka8YcOGyxxd4axdu1bLly/XX//6V0dbamqqbDab3n//fZfvGThwoCIjIy9XiEWSkZGh0aNHq3379goPD5fNZnO5wG6lSpU0ZMgQPfnkk5c/SMAiyEUli1xUei1cuFD9+vVT7dq1Va5cOdWvX18PP/ywjh496nQeuQiwlnfffVexsbHq1KmTpPOPifbr10/z589XXl5escZesGCBrr32WlWoUEGHDx92HF26dFFeXp5Wr17tdH6/fv1UoUIFx+sLd3Dt3r3b42vn5eVp+fLl6tWrl2rXru1or1q1qu6++26tWbNGx48fd3rPfffd5/TI7LXXXqu8vDz99NNPBV6rffv2CgoKcqwtd+GutzZt2igyMlLNmjVzPOZ64X8vrD+3YMECxcTE6MYbb3T6jlq1aqXIyEi3d8NJ0rJly1S9enX17NnT0RYeHq6hQ4e6PD8yMlJ/+tOfHK9DQ0PVtm3bIn2/AI+4+rGlS5fq9ttvV1hYmPr3768mTZooJydHa9as0SOPPKItW7bo9ddf93WYbp0+ffqyLzhaFOHh4friiy+UlZWluLg4p753331X4eHhOnPmjI+iu7QXX3xRnTt3Vt26dX0dilelpaVp2rRpatSokRo2bFjgrkgPPPCApk2bps8//1w33HDD5QsSsABy0eVBLiqd7rvvPlWrVk1/+tOfVKNGDW3evFnTp0/Xxx9/rG+//VZly5Z1nEsuAqwhLy9P8+fPV6dOnZSZmelob9eunSZPnqyVK1fqpptuKvL4O3bs0Pfff6/KlSu77D906JDT6xo1aji9vlCsu3gttsL4+eef9dtvv6l+/fr5+ho2bCi73a59+/apcePGxb5++fLl1bhxY6ci3FVXXeWYV9u3b+/Ud6EwJp3/jo4dO6YqVaq4HPvi7+iPfvrpJ9WpU8epqCjJbf6Kj4/Pd26FChX0/fffF/j5AFdK/79I4VJmZqbuvPNO1axZU59//rmqVq3q6Bs2bJh27typpUuX+jDCSwsPD/d1CIXSoUMHrV+/Xu+9955GjhzpaP/vf/+rL7/8Ur1799YHH3zgwwjdO3TokJYuXapZs2b5OhSv69mzp44ePaqoqCi99NJLBRboGjZsqCZNmiglJYUfigAvIhddPuSi0un999/Pt7h4q1atNGDAAL377rsaMmSIo51cBFjD559/roMHD2r+/PmaP39+vv533323WAU6u92uG2+8UY8++qjL/iuvvNLpdXBwsMvzjDFFjsETxbn+Nddco1mzZuno0aNau3at07pt7du31z//+U+dO3dOa9asUatWrRw53W63q0qVKm53znVX3CwKX3+/CCw84uqnJk2apJMnT+rNN990+oHogrp16zr9Az43N1dPP/20Y/eeWrVq6YknntDZs2ed3lerVi11795dqampat26tcqWLaumTZs6dqtZuHChmjZtqvDwcLVq1UqbNm1yGd/u3buVnJysiIgIVatWTU899VS+SeriHYHGjx8vm82mnTt3auDAgSpfvrxiYmI0aNAg/fbbb/mu8c4776hVq1YqW7asKlasqDvvvFP79u3Ld96FXYvKli2rtm3b6ssvv3T7vboSHh6uPn36aO7cuU7t8+bNU4UKFZScnJzvPd9//70GDhzoeNwrLi5OgwcP1i+//OJ03okTJzRq1CjVqlVLYWFhqlKlim688UZ9++23Bca0fPlylStXTnfddZdyc3Pdnrd06VLl5ua6fSzKU5988omuvfZaRUREKCoqSt26ddOWLVuczinsZ5fOb4fepk0bhYeHq06dOpo9e3ahY6lYsaKioqIKff6NN96ojz76iGQJeBG5iFxk9Vx0cXFOknr37i1J2rZtW74+chEQ+N59911VqVJFCxYsyHfcddddWrRokWP5h4vvvPojd3116tTRyZMn1aVLF5fHxXesFUZBcfxR5cqVVa5cOWVkZOTr2759u4KCgpSQkODx9d255pprZIzRZ599pk2bNqlDhw6Ovvbt2+v06dNaunSpdu/e7Xi8VTr/Hf3yyy/q0KGDy++oefPmbq9Zs2ZN7dq1K988vXPnziJ/jsJ+vwAFOj/10UcfqXbt2oXe/WXIkCEaO3asWrZsqSlTpuj666/XxIkTdeedd+Y7d+fOnbr77rvVo0cPTZw4UUeOHFGPHj307rvvavTo0frTn/6kCRMmaNeuXbrjjjuctvOWzt/WffPNNys2NlaTJk1Sq1atNG7cOI0bN65Qsd5xxx06ceKEJk6cqDvuuEMpKSmaMGGC0znPPvus+vfvr3r16unll1/WqFGjtHLlSl133XVO6768+eabuv/++xUXF6dJkyapQ4cO6tmzp8sfngpy991365tvvtGuXbscbXPnztVtt93mcgegFStWaPfu3Ro0aJBeffVV3XnnnZo/f75uueUWp8n+gQce0MyZM9W3b1+99tpr+stf/qKyZcu6/Ef9BUuWLFHPnj11++2365133inw0ax169apUqVKqlmzpsv+EydOOK3LcOG4+IdlSXr77bfVrVs3RUZG6oUXXtCTTz6prVu36pprrnFa+62wn33z5s266aabdOjQIY0fP16DBg3SuHHjtGjRIrefpzhatWqlo0eP5vshDkDRkYvIReSi/LKysiRJV1xxRb4+chEQ2E6fPq2FCxeqe/fuuu222/Idw4cP14kTJ/Sf//xHkhQRESFJ+datvNDnqv2OO+5QWlqaPv3003x9R48eLfAXJu4UFMcfBQcH66abbtKHH37oNOdmZ2dr7ty5uuaaaxQdHe3x9d25UHR7+eWXde7cOad/b9SqVUtVq1bVpEmTnM6Vzn9HeXl5evrpp/ONmZubW+DnTE5O1v79+x1/RpJ05swZ/eMf/yjy5yjs9wuwi6sfOnbsmJFkbr311kKdn56ebiTl2zntL3/5i5FkPv/8c0dbzZo1jSSzbt06R9unn35qJJmyZcuan376ydE+e/bsfDvZDBgwwEgyI0aMcLTZ7XbTrVs3Exoaan7++WdHuy7aEejCjmmDBw92irN3796mUqVKjtd79uwxwcHBjl16Lti8ebMpU6aMoz0nJ8dUqVLFtGjRwpw9e9Zx3uuvv24kFWrnvJo1a5pu3bqZ3NxcExcXZ55++mljjDFbt2517CJ0YYei9evXO97322+/5Rtr3rx5RpJZvXq1oy0mJsYMGzaswBj+uHPeBx98YEJCQszQoUNNXl7eJeO/5pprTKtWrfK1f/HFF0ZSgccfd0A8ceKEKV++vBk6dKjTOFlZWSYmJsapvbCfvVevXiY8PNzp79TWrVtNcHCwxzvnvfjii0aSyczMdHvOunXrjCTz3nvveTQ2ANfIReQicpFr9957rwkODs63w6Ix5CIg0M2fPz/fDqB/lJeXZypXrmx69OhhjDm/M2lwcLC5+uqrTUpKipk3b57Jzs42xhjz4IMPGpvNZp5++mkzb948s3LlSmOMMadOnTItW7Y0ZcqUMUOGDDEzZ840L730kmMH8ws57sIuri+++GK+OC7Off/+97+NJPN///d/5p133jHz5s1ze+4PP/xgIiIiTPXq1c2zzz5rXnjhBVO7dm0TFhZmvvrqK8d5rvKSMb/P/a52rnUlISHBSDK1atXK19e3b18jydhsNnP48GGnvvvvv99IMl27djVTpkwx06dPNyNHjjTVqlUzCxYscJx38S6uJ06cMLVq1TJly5Y1jz32mHnllVdM27ZtTYsWLYwkk5qa6vReVzucDxgwwNSsWdPxOicnx5QvX97Ur1/fvPHGG2bevHlm9+7dhfr8sBbuoPNDF3bGKezjfR9//LEkacyYMU7tDz/8sCTlWx+oUaNGSkpKcrxu166dJOmGG25wumX6QrurHWqGDx/u+G+bzabhw4crJydHn3322SXjfeCBB5xeX3vttfrll18cn3vhwoWy2+264447nH7THhcXp3r16jl25dmwYYMOHTqkBx54QKGhoY7xBg4cqJiYmEvG8UfBwcG64447NG/ePEnnb11PSEhw7IJ0sT8uCn3mzBkdPnxYV199tSQ5PTJUvnx5ff311zpw4MAlY5g3b5769eun+++/X7Nnz1ZQ0KX/7/vLL7847dp0sbFjx2rFihX5jovXxVixYoWOHj2qu+66y+k7Dw4OVrt27Zx2QirMZ8/Ly9Onn36qXr16Of2datiwocvHtLzhwvdw+PDhEhkfsBpyEbmIXJTf3Llz9eabb+rhhx9WvXr18vWTi4DAdmHTnhtvvNFlf1BQkLp166Zly5bpl19+UVxcnGbNmqVDhw7p3nvv1V133aWtW7dKOj833nLLLZo0aZLuuusuPfXUU5KkcuXKadWqVXrkkUeUmpqqkSNH6vnnn9eOHTs0YcIEj3OLJPXp00cjRozQsmXL9H//93+666673J7buHFjffnll2rSpIkmTpyoCRMmqGbNmvriiy8cOdmbLtwZ5+pu/QuPvDZo0ECVKlVy6ps1a5Zef/11HTp0SE888YQef/xxff755/rTn/7k9KjsxSIjIx2b+bzyyit65plndO211zp24S7K2rUhISH617/+peDgYD3wwAO66667tGrVKo/HQeBjkwg/dOG24RMnThTq/J9++klBQUH5dp6Ji4tT+fLl821xffG6BRcm+YvXE7jQfvEOPEFBQU7bbku/L1b6x1uh3Slop5/o6Gjt2LFDxhiX//CV5HjM58Lnuvi8kJCQfPEVxt13361p06bpu+++09y5c3XnnXe6XU/g119/1YQJEzR//vx8uwQdO3bM8d+TJk3SgAEDlJCQoFatWumWW25R//7988WXmZmpP/3pT7r99tv16quvehS3KWCdm6ZNm7pcE+idd95xer1jxw5Jcruo9R9vZS/MZ//55591+vRpl3+G9evXd/wg700XvgfWgAC8g1xELvKEFXLRl19+qXvvvVfJycl69tlnXZ5DLgIC2x8fi3Rnzpw5mjNnjuP1kCFDnDaUuSA2NlZLlixxOUZkZKSee+45Pffcc26vU6tWLbdz78XtwcHBmjZtmqZNm3bJcyXpqquu0rJly9xeWzr/i6iBAwfma+/YsaNH63DOnTs33/qrF4wePVqjR492+96hQ4dq6NChBY5/YX3bP0pMTMz33U+dOlXS+V1bC3qvJKWkpORr69mzp3r27FlgLAAFOj8UHR2tatWq6YcffvDofYX9x6C7nWgu1w41l7qO3W6XzWbTJ5984vLcyMhIr8ZzQbt27VSnTh2NGjVKmZmZuvvuu92ee8cdd2jdunV65JFH1KJFC0VGRsput+vmm292Wifpjjvu0LXXXqtFixZp+fLlevHFF/XCCy9o4cKF6tq1q+O8qlWrqmrVqvr444+1YcMGtW7dulAxV6pUqUhbqF/sQsxvv/224uLi8vX/ce2hwn72y+3C9+BqTSAAniMXkYvIRb/77rvv1LNnTzVp0kTvv/++2zX5yEUAUPqdPn06353Ys2fPVr169VS9enUfRoZAR4HOT3Xv3l2vv/660tLSnB4BcqVmzZqy2+3asWOHGjZs6GjPzs7W0aNH3S7aXFR2u127d+922uL7xx9/lHT+NznFVadOHRljlJiYmG8b8T+68Ll27Njh9Nv2c+fOKTMzs8Dde9y566679Mwzz6hhw4Zq0aKFy3OOHDmilStXasKECRo7dqyj/cJv/i9WtWpVPfjgg3rwwQd16NAhtWzZUs8++6zTD0Xh4eFasmSJbrjhBt18881atWqVGjdufMl4GzRooA8++MCzD+lCnTp1JElVqlQpcBe+wn72ypUrq2zZsi6/E1e7QnlDZmamJDn9fwBA8ZCLyEXkImnXrl26+eabVaVKFX388ccFFmfJRQBQ+vXp00c1atRQixYtdOzYMb3zzjvavn273n33XV+HhgDHGnR+6tFHH1VERISGDBmi7OzsfP27du3SK6+8Ikm65ZZbJP1+W+4FL7/8siSpW7duXo9v+vTpjv82xmj69OkKCQlR586diz12nz59FBwcrAkTJuS7Y8IYo19++UWS1Lp1a1WuXFmzZs1STk6O45yUlJQi76AzZMgQjRs3TpMnT3Z7zoU7KS6O7eLvPy8vz+kRI+n8Dx3VqlVzuXNdTEyMPv30U1WpUkU33nij0y5+7iQlJenIkSMu12byRHJysqKjo/Xcc8/p3Llz+fp//vlnSYX/7MHBwUpOTtbixYu1d+9eR/u2bdtc7kjlDRs3blRMTEyhfpgEUDjkInKR1XNRVlaWbrrpJgUFBenTTz9V5cqVCzyfXAQApV9ycrLWrl2rRx55RBMmTFBYWJjmz59f4F3rgDdwB52fqlOnjubOnat+/fqpYcOG6t+/v5o0aaKcnBytW7dOCxYscDzz37x5cw0YMECvv/66jh49quuvv17ffPON/vWvf6lXr17q1KmTV2MLDw/XsmXLNGDAALVr106ffPKJli5dqieeeOKS/3AtjDp16uiZZ57R448/rj179qhXr16KiopSZmamFi1apPvuu09/+ctfFBISomeeeUb333+/brjhBvXr10+ZmZmaM2dOkdb9kc7fCTF+/PgCz4mOjtZ1112nSZMm6dy5c6pevbqWL1/u+K35BSdOnFB8fLxuu+02NW/eXJGRkfrss8+0fv16tz90XXHFFVqxYoWuueYadenSRWvWrCnwNutu3bqpTJky+uyzz3Tfffd5/Hn/+Jlmzpyp//u//1PLli115513qnLlytq7d6+WLl2qDh06aPr06YX+7JI0YcIELVu2TNdee60efPBB5ebm6tVXX1Xjxo31/fffXzKmY8eOOdZAWrt2raTzP4yXL19e5cuXd1ocXjq/uHiPHj1Y9wfwInIRucjquejmm2/W7t279eijj2rNmjVas2aNoy82NjbfQvHkIgAo/UaNGqVRo0b5OgxY0eXaLhYl48cffzRDhw41tWrVMqGhoSYqKsp06NDBvPrqq+bMmTOO886dO2cmTJhgEhMTTUhIiElISDCPP/640znGGFOzZk3TrVu3fNeRZIYNG+bU5mrr7gvbe+/atcvcdNNNply5ciY2NtaMGzfO5OXl5Rvzj1t2jxs3zkhybA1+wYUtujMzM53aP/jgA3PNNdeYiIgIExERYRo0aGCGDRtmMjIynM577bXXTGJiogkLCzOtW7c2q1evzredtjvuvg9X8f1xC/H//ve/pnfv3qZ8+fImJibG3H777ebAgQNOn/ns2bPmkUceMc2bNzdRUVEmIiLCNG/e3Lz22mtO47vavnvnzp2matWqpmHDhvm+r4v17NnTdO7c2antwvbmf9xi/I8u/Dle7IsvvjDJyckmJibG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bbVv3z7deOONCgo6/5Rs7dq1WfMHpV6ZLns9fs++v7d32Z7wzLrihgOgGPwhH105fb/KBIU5teUWYZyYW3Z6J6D/qf3XNK+O5y2H70ty23fF657HHP/BTy7bi/Jn4G0179js6xAAWIkfrcEEAF7n4fy3evVqvfjii9q4caMOHjyoRYsWqVevXm7PT01NVadOnfK1Hzx4UHFxcYW+rscFOklq3bq1WrduLWOMjDGy2Wzq1q1bUYYCAKDIyEcAAAAAvOnUqVNq3ry5Bg8erD59+hT6fRkZGYqOjna8rlKlikfX9XiTCEl666231LRpU5UtW1Zly5ZVs2bN9PbbbxdlKAAAiox8BABAIRgODg4Oix8e6Nq1q5555hn17t3bo/dVqVJFcXFxjuPCEz6F5fEddC+//LKefPJJDR8+XB06dJAkrVmzRg888IAOHz6s0aNHezokAAAeIx8BAFBIRfgBFQACxv/mv+PHjzs1h4WFKSwszMUbiqZFixY6e/asmjRpovHjxzt+Riksjwt0r776qmbOnKn+/fs72nr27KnGjRtr/Pjx/EAEALgsyEcAABQSBToAVva/+S8hIcGpedy4cRo/fnyxh69atapmzZql1q1b6+zZs3rjjTfUsWNHff3112rZsmWhx/G4QHfw4EG1b59/0fz27dvr4MGDng4HAECRkI8AAAAAFNa+ffuc1ojz1t1z9evXV/369R2v27dvr127dmnKlCkeLb/jcYGubt26+ve//60nnnjCqf29995TvXr1PB0OKPXYrRUonfwhH+UeyJZsIcUep0ytGu6vscfz3am96dMD6W77kqu18GisouzUWpD9vWu6bI99db/HYx3/pI7bvuiuuzweDwAuK3ZxBWBl/5v/oqOjnQp0Jalt27Zas2aNR+/xuEA3YcIE9evXT6tXr3Y8T7t27VqtXLlS//73vz0dDgCAIiEfAQBQODZz/gAAK/LF/Jeenq6qVat69B6PC3R9+/bVN998o5dfflmLFy+WJDVs2FDffPONrrrqKk+HAwCgSMhHAAAUEmvQAbAyD+e/kydPaufOnY7XmZmZSk9PV8WKFVWjRg09/vjj2r9/v9566y1J0tSpU5WYmKjGjRvrzJkzeuONN/T5559r+fLlHl3XowLd8ePH9fXXXysnJ0dTpkxR5cqVPboYAADeQD4CAAAAUBI2bNigTp06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",
      "text/plain": [
       "<Figure size 1500x1000 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# a cute little mask playground for me and you to figure out the mask generation logic \n",
    "# so we can construct and use the right sparse masks in forward() methods above\n",
    "def plot_masks():\n",
    "    n = 50\n",
    "    A = torch.randn(n, n)\n",
    "    \n",
    "    fig = plt.figure(figsize=(15, 10))\n",
    "    # Use y parameter instead of pad which is not supported\n",
    "    fig.suptitle('Different Attention Mask Patterns', fontsize=14, y=1.05)\n",
    "    \n",
    "    # Set up grid of subplots, 2 rows 3 cols\n",
    "    gs = fig.add_gridspec(2, 3, hspace=0.3, wspace=0.3)\n",
    "    \n",
    "    # causal\n",
    "    ax1 = fig.add_subplot(gs[0, 0])\n",
    "    causal_mask = torch.arange(n)[:, None] >= torch.arange(n)\n",
    "    im1 = ax1.imshow(A * causal_mask, cmap='viridis', vmin=0)\n",
    "    ax1.set_title('Causal Mask', pad=10)\n",
    "    \n",
    "    # block diagonal + causal\n",
    "    ax2 = fig.add_subplot(gs[0, 1])\n",
    "    block_sz = 3\n",
    "    num_blocks = (n + block_sz - 1) // block_sz\n",
    "    last_block_size = n - (num_blocks - 1) * block_sz\n",
    "    blocks = [torch.ones(block_sz, block_sz) for _ in range(num_blocks - 1)]\n",
    "    blocks.append(torch.ones(last_block_size, last_block_size))\n",
    "    block_mask = torch.block_diag(*blocks).bool()\n",
    "    block_causal_mask = block_mask & causal_mask\n",
    "    im2 = ax2.imshow(A * block_causal_mask, cmap='viridis', vmin=0)\n",
    "    ax2.set_title('Block Diagonal + Causal', pad=10)\n",
    "    \n",
    "    # strided columns + causal\n",
    "    ax3 = fig.add_subplot(gs[0, 2])\n",
    "    stride = 3\n",
    "    col_mask = (0 * torch.arange(n)[:, None] + torch.arange(n)) % stride == 0\n",
    "    col_causal_mask = col_mask & causal_mask\n",
    "    im3 = ax3.imshow(A * col_causal_mask, cmap='viridis', vmin=0)\n",
    "    ax3.set_title('Strided Columns + Causal', pad=10)\n",
    "    \n",
    "    # combined masks\n",
    "    ax4 = fig.add_subplot(gs[1, 0])\n",
    "    combined_mask = torch.stack([block_causal_mask, col_causal_mask])\n",
    "    im4 = ax4.imshow(A * combined_mask[0], cmap='viridis', vmin=0)\n",
    "    ax4.set_title('Combined Mask (Head 1)', pad=10)\n",
    "    \n",
    "    ax5 = fig.add_subplot(gs[1, 1])\n",
    "    im5 = ax5.imshow(A * combined_mask[1], cmap='viridis', vmin=0)\n",
    "    ax5.set_title('Combined Mask (Head 2)', pad=10)\n",
    "    \n",
    "    # Add colorbar to the right of the last plot\n",
    "    cbar_ax = fig.add_subplot(gs[1, 2])\n",
    "    plt.colorbar(im1, cax=cbar_ax)\n",
    "    cbar_ax.set_title('Attention Weight', pad=10)\n",
    "    \n",
    "    # Style all subplots\n",
    "    for ax in [ax1, ax2, ax3, ax4, ax5]:\n",
    "        ax.set_xlabel('Key Position')\n",
    "        ax.set_ylabel('Query Position')\n",
    "        ax.grid(False)\n",
    "        # Remove ticks but keep labels\n",
    "        ax.tick_params(length=0)\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_masks()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "envi",
   "language": "python",
   "name": "lingua_env"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
